+++ /dev/null
-jin yoon <jinny.yoon at samsung dot com>
-seungtaek chung <seungtaek.chung at samsung dot com>
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(starter C)
-SET(VENDOR "tizen")
SET(PACKAGE ${PROJECT_NAME})
-SET(PKGNAME "org.${VENDOR}.${PACKAGE}")
+SET(PKGNAME "org.tizen.${PACKAGE}")
SET(PREFIX ${CMAKE_INSTALL_PREFIX})
SET(BINDIR "${PREFIX}/bin")
SET(DATADIR "${PREFIX}/share")
-SET(LOCALEDIR "${DATADIR}/locale")
-
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+SET(RESDIR "${PREFIX}/res")
+SET(LOCALEDIR "${PREFIX}/share/locale")
+IF("${TIZEN_PROFILE_NAME}" STREQUAL "MOBILE")
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/include/mobile
+)
INCLUDE(FindPkgConfig)
-SET(PKGS_CHECK_MODULES
- ail
- aul
- capi-system-media-key
- db-util
- dlog
- ecore
- ecore-evas
- ecore-input
- eet
- eina
- elementary
- evas
- heynoti
- sysman
- syspopup-caller
- vconf
- appcore-efl
- glib-2.0
- ui-gadget-1
- bundle
- capi-appfw-application
- capi-system-info
- pkgmgr-info)
-
-IF (with_x)
- pkg_check_modules(pkgs REQUIRED ${PKGS_CHECK_MODULES} ecore-x utilX x11 xcomposite xext)
-ENDIF(with_x)
+pkg_check_modules(pkgs REQUIRED
+ aul
+ capi-system-media-key
+ db-util
+ dlog
+ ecore
+ ecore-evas
+ ecore-input
+#ecore-x
+ edbus
+ eina
+ elementary
+ evas
+ syspopup-caller
+#utilX
+ vconf
+ appcore-efl
+ glib-2.0
+ ui-gadget-1
+ bundle
+ capi-appfw-application
+ capi-appfw-app-manager
+ capi-network-bluetooth
+ capi-system-system-settings
+ feedback
+ alarm-service
+ pkgmgr-info
+ deviced
+ edbus
+ dbus-1
+ dbus-glib-1
+ tts
+#capi-message-port
+ security-server
+ efl-assist
+)
+ELSE()
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/include/wearable
+)
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+ aul
+ capi-system-media-key
+ db-util
+ dlog
+ ecore
+ ecore-evas
+ ecore-input
+#ecore-x
+ edbus
+ eina
+ elementary
+ evas
+ syspopup-caller
+#utilX
+ vconf
+ appcore-efl
+ glib-2.0
+ ui-gadget-1
+ bundle
+ capi-appfw-application
+ capi-appfw-app-manager
+ capi-network-bluetooth
+ feedback
+ alarm-service
+ pkgmgr-info
+ deviced
+ edbus
+ dbus-1
+ dbus-glib-1
+)
+ENDIF()
-IF (with_wayland)
- ADD_DEFINITIONS("-DWAYLAND")
- pkg_check_modules(pkgs REQUIRED ${PKGS_CHECK_MODULES})
-ENDIF(with_wayland)
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_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -fPIE")
+SET(CMAKE_C_FLAGS_PROFILING "-O0 -g -pg -fPIE")
+SET(CMAKE_CXX_FLAGS_PROFILING "-O0 -std=c++0x -g -pg -fPIE")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fPIE")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -std=c++0x -g -fPIE")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -g -fPIE")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -std=c++0x -g -fPIE")
+SET(CMAKE_C_FLAGS_CCOV "-O2 -g --coverage -fPIE")
+SET(CMAKE_CXX_FLAGS_CCOV "-O2 -std=c++0x -g --coverage -fPIE")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${PREFIX}/lib -pie")
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")
-
+IF("${TIZEN_PROFILE_NAME}" STREQUAL "MOBILE")
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
+ src/dbus_util.c
+ src/package_mgr.c
+ src/process_mgr.c
+ src/status.c
+
+ src/mobile/hw_key.c
+ src/mobile/home_mgr.c
+ src/mobile/starter.c
+#src/mobile/lock_mgr.c
+#src/mobile/lock_pwd_util.c
+#src/mobile/lock_pwd_simple.c
+#src/mobile/lock_pwd_complex.c
+#src/mobile/lock_pwd_control_panel.c
+#src/mobile/lock_pwd_verification.c
+#src/mobile/window_mgr.c
+ src/mobile/popup.c
)
+ELSE()
+ADD_EXECUTABLE(${PROJECT_NAME}
+ src/dbus_util.c
+ src/package_mgr.c
+ src/process_mgr.c
+ src/status.c
+
+ src/wearable/clock_mgr.c
+ src/wearable/home_mgr.c
+ src/wearable/hourly_alert.c
+ src/wearable/hw_key.c
+ src/wearable/starter.c
+)
+ENDIF()
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(DIRECTORY DESTINATION ${DATADIR})
INSTALL(FILES ${CMAKE_SOURCE_DIR}/rd4starter DESTINATION /etc/init.d
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
#INSTALL to /etc/init.d
+
+INSTALL(FILES starter.efl DESTINATION /etc/smack/accesses.d)
+
+ADD_SUBDIRECTORY(res)
+ADD_SUBDIRECTORY(po)
--- /dev/null
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ 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.
+
+ 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,
+ 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 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 in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) 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
+
+ (d) 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 Apache License to your work.
+
+ To apply the Apache 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 Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+++ /dev/null
-Flora License
-
-Version 1.1, April, 2013
-
-http://floralicense.org/license/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction,
-and distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by
-the copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and
-all other entities that control, are controlled by, or are
-under common control with that entity. For the purposes of
-this definition, "control" means (i) the power, direct or indirect,
-to cause the direction or management of such entity,
-whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
-or more of the outstanding shares, or (iii) beneficial ownership of
-such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity
-exercising permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications,
-including but not limited to software source code, documentation source,
-and configuration files.
-
-"Object" form shall mean any form resulting from mechanical
-transformation or translation of a Source form, including but
-not limited to compiled object code, generated documentation,
-and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form,
-made available under the License, as indicated by a copyright notice
-that is included in or attached to the work (an example is provided
-in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form,
-that is based on (or derived from) the Work and for which the editorial
-revisions, annotations, elaborations, or other modifications represent,
-as a whole, an original work of authorship. For the purposes of this License,
-Derivative Works shall not include works that remain separable from,
-or merely link (or bind by name) to the interfaces of, the Work and
-Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original
-version of the Work and any modifications or additions to that Work or
-Derivative Works thereof, that is intentionally submitted to Licensor
-for inclusion in the Work by the copyright owner or by an individual or
-Legal Entity authorized to submit on behalf of the copyright owner.
-For the purposes of this definition, "submitted" means any form of
-electronic, verbal, or written communication sent to the Licensor or
-its representatives, including but not limited to communication on
-electronic mailing lists, source code control systems, and issue
-tracking systems that are managed by, or on behalf of, the Licensor
-for the purpose of discussing and improving the Work, but excluding
-communication that is conspicuously marked or otherwise designated
-in writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity
-on behalf of whom a Contribution has been received by Licensor and
-subsequently incorporated within the Work.
-
-"Tizen Certified Platform" shall mean a software platform that complies
-with the standards set forth in the Tizen Compliance Specification
-and passes the Tizen Compliance Tests as defined from time to time
-by the Tizen Technical Steering Group and certified by the Tizen
-Association or its designated agent.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-copyright license to reproduce, prepare Derivative Works of,
-publicly display, publicly perform, sublicense, and distribute the
-Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-(except as stated in this section) patent license to make, have made,
-use, offer to sell, sell, import, and otherwise transfer the Work
-solely as incorporated into a Tizen Certified Platform, where such
-license applies only to those patent claims licensable by such
-Contributor that are necessarily infringed by their Contribution(s)
-alone or by combination of their Contribution(s) with the Work solely
-as incorporated into a Tizen Certified Platform to which such
-Contribution(s) was submitted. If You institute patent litigation
-against any entity (including a cross-claim or counterclaim
-in a lawsuit) alleging that the Work or a Contribution incorporated
-within the Work constitutes direct or contributory patent infringement,
-then any patent licenses granted to You under this License for that
-Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-Work or Derivative Works thereof pursuant to the copyright license
-above, in any medium, with or without modifications, and in Source or
-Object form, provided that You meet the following conditions:
-
- 1. You must give any other recipients of the Work or Derivative Works
- a copy of this License; and
- 2. You must cause any modified files to carry prominent notices stating
- that You changed the files; and
- 3. You must retain, in the Source form of any Derivative Works that
- You distribute, all copyright, patent, trademark, and attribution
- notices from the Source form of the Work, excluding those notices
- that do not pertain to any part of the Derivative Works; and
- 4. If the Work includes a "NOTICE" text file as part of its distribution,
- then any Derivative Works that You distribute must include a readable
- copy of the attribution notices contained within such NOTICE file,
- excluding those notices that do not pertain to any part of
- the Derivative Works, in at least one of the following places:
- within a NOTICE text file distributed as part of the Derivative Works;
- within the Source form or documentation, if provided along with the
- Derivative Works; or, within a display generated by the Derivative Works,
- if and wherever such third-party notices normally appear.
- The contents of the NOTICE file are for informational purposes only
- and do not modify the License. You may add Your own attribution notices
- within Derivative Works that You distribute, alongside or as an addendum
- to the NOTICE text from the Work, provided that such additional attribution
- notices cannot be construed as modifying the License. You may add Your own
- copyright statement to Your modifications and may provide additional or
- different license terms and conditions for use, reproduction, or
- distribution of Your modifications, or for any such Derivative Works
- as a whole, provided Your use, reproduction, and distribution of
- the Work otherwise complies with the conditions stated in this License
- and your own copyright statement or terms and conditions do not conflict
- the conditions stated in the License including section 3.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-any Contribution intentionally submitted for inclusion in the Work
-by You to the Licensor shall be under the terms and conditions of
-this License, without any additional terms or conditions.
-Notwithstanding the above, nothing herein shall supersede or modify
-the terms of any separate license agreement you may have executed
-with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-names, trademarks, service marks, or product names of the Licensor,
-except as required for reasonable and customary use in describing the
-origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-agreed to in writing, Licensor provides the Work (and each
-Contributor provides its Contributions) on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-implied, including, without limitation, any warranties or conditions
-of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-PARTICULAR PURPOSE. You are solely responsible for determining the
-appropriateness of using or redistributing the Work and assume any
-risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-whether in tort (including negligence), contract, or otherwise,
-unless required by applicable law (such as deliberate and grossly
-negligent acts) or agreed to in writing, shall any Contributor be
-liable to You for damages, including any direct, indirect, special,
-incidental, or consequential damages of any character arising as a
-result of this License or out of the use or inability to use the
-Work (including but not limited to damages for loss of goodwill,
-work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses), even if such Contributor
-has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-the Work or Derivative Works thereof, You may choose to offer,
-and charge a fee for, acceptance of support, warranty, indemnity,
-or other liability obligations and/or rights consistent with this
-License. However, in accepting such obligations, You may act only
-on Your own behalf and on Your sole responsibility, not on behalf
-of any other Contributor, and only if You agree to indemnify,
-defend, and hold each Contributor harmless for any liability
-incurred by, or claims asserted against, such Contributor by reason
-of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Flora License to your work
-
-To apply the Flora License to your work, attach the following
-boilerplate notice, with the fields enclosed by brackets "[]"
-replaced with your own identifying information. (Don't include
-the brackets!) The text should be enclosed in the appropriate
-comment syntax for the file format. We also recommend that a
-file or class name and description of purpose be included on the
-same "printed page" as the copyright notice for easier
-identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Flora License, Version 1.1 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://floralicense.org/license/
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
-Except as noted, this software is licensed under Flora License, Version 1.1
-Please, see the LICENSE file for Flora License, Version 1.1 terms and conditions.
+Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+++ /dev/null
-starter (0.4.59) unstable; urgency=low
-
- * Git: slp/pkgs/s/starter
- * Tag: starter_0.4.59
-
- * Modify the service file : remove an unused field
-
- -- Jin Yoon <jinny.yoon@samsung.com> Tue, 02 Apr 2013 13:08:59 +0900
-
-starter (0.4.58) unstable; urgency=low
-
- * Git: slp/pkgs/s/starter
- * Tag: starter_0.4.58
-
- * Remove an unused vconf setting
-
- -- Jin Yoon <jinny.yoon@samsung.com> Mon, 11 Mar 2013 16:23:50 +0900
-
-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
+++ /dev/null
-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, pkgmgr-info-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)
-
+++ /dev/null
-#!/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
+++ /dev/null
-@PREFIX@/bin/*
-@PREFIX@/lib/*
-/etc/init.d/*
-/opt/ug/*
+++ /dev/null
-#!/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
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __DBUS_UTIL_H__
+#define __DBUS_UTIL_H__
+
+#include <E_DBus.h>
+
+#define OOM_ADJ_VALUE_HOMESCREEN 0
+
+#ifdef TIZEN_PROFILE_MOBILE
+#define OOM_ADJ_VALUE_DEFAULT 200
+#else
+#define OOM_ADJ_VALUE_DEFAULT 0
+#endif
+
+#define DEVICED_BUS_NAME "org.tizen.system.deviced"
+#define DEVICED_OBJECT_PATH "/Org/Tizen/System/DeviceD"
+#define DEVICED_INTERFACE_NAME DEVICED_BUS_NAME
+#define DEVICED_PATH DEVICED_OBJECT_PATH"/Process"
+#define DEVICED_INTERFACE DEVICED_INTERFACE_NAME".Process"
+#define DEVICED_SET_METHOD "oomadj_set"
+
+#define DISPLAY_OBJECT_PATH DEVICED_OBJECT_PATH"/Display"
+#define DEVICED_INTERFACE_DISPLAY DEVICED_INTERFACE_NAME".display"
+#define MEMBER_LCD_ON "LCDOn"
+#define MEMBER_LCD_OFF "LCDOff"
+
+extern void dbus_util_send_home_raise_signal(void);
+extern int dbus_util_send_oomadj(int pid, int oom_adj_value);
+extern void dbus_util_send_cpu_booster_signal(void);
+extern void dbus_util_send_poweroff_signal(void);
+extern void dbus_util_send_lock_PmQos_signal(void);
+
+extern int dbus_util_receive_lcd_status(void (*changed_cb)(void *data, DBusMessage *msg), void *data);
+extern char *dbus_util_msg_arg_get_str(DBusMessage *msg);
+
+#endif //__DBUS_UTIL_H__
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-extern void destroy_key_window(void);
-extern void create_key_window(void);
-
-// End of a file
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCK_DAEMON_H__
-#define __LOCK_DAEMON_H__
-
-int start_lock_daemon(int launch_lock);
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCKD_DEBUG_H__
-#define __LOCKD_DEBUG_H__
-
-#include <stdio.h>
-#include <dlog.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-
-#define LOG_TAG "starter"
-
-#define ENABLE_LOG_SYSTEM
-
-void lockd_log_t(char *fmt, ...);
-
-#ifdef ENABLE_LOG_SYSTEM
-#define STARTER_ERR(fmt, arg...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##arg)
-#define STARTER_DBG(fmt, arg...) LOGD("["LOG_TAG"%s:%d:D] "fmt, __FILE__, __LINE__, ##arg)
-#else
-#define STARTER_ERR(fmt, arg...)
-#define STARTER_DBG(fmt, arg...)
-#endif
-
-#ifdef ENABLE_LOG_SYSTEM
-#define _ERR(fmt, arg...) do { STARTER_ERR(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:E] "fmt, __LINE__, ##arg); } while (0)
-#define _DBG(fmt, arg...) do { STARTER_DBG(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:D] "fmt, __LINE__, ##arg); } while (0)
-
-#define LOCKD_ERR(fmt, arg...) _ERR(fmt, ##arg)
-#define LOCKD_DBG(fmt, arg...) _DBG(fmt, ##arg)
-#else
-#define _ERR(...)
-#define _DBG(...)
-
-#define LOCKD_ERR(...)
-#define LOCKD_ERR(...)
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCKD_PROCESS_MGR_H__
-#define __LOCKD_PROCESS_MGR_H__
-
-int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *),
- int phone_lock_state);
-
-int lockd_process_mgr_restart_lock(int phone_lock_state);
-
-int lockd_process_mgr_start_phone_lock(void);
-
-int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *));
-
-void lockd_process_mgr_terminate_lock_app(int lock_app_pid,
- int state);
-
-void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid);
-
-int lockd_process_mgr_check_lock(int pid);
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCKD_WINDOW_MGR_H__
-#define __LOCKD_WINDOW_MGR_H__
-
-typedef struct _lockw_data lockw_data;
-
-Eina_Bool
-lockd_window_set_window_property(lockw_data * data, int lock_app_pid,
- void *event);
-
-Eina_Bool
-lockd_window_set_window_effect(lockw_data * data, int lock_app_pid,
- void *event);
-
-void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid);
-
-void
-lockd_window_mgr_ready_lock(void *data, lockw_data * lockw,
- Eina_Bool(*create_cb) (void *, int, void *),
- Eina_Bool(*show_cb) (void *, int, void *));
-
-void lockd_window_mgr_finish_lock(lockw_data * lockw);
-
-lockw_data *lockd_window_init(void);
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <bundle.h>
-#include <sys/types.h>
-#include <stdbool.h>
-
-extern void menu_daemon_init(void *data);
-extern void menu_daemon_fini(void);
-
-extern int menu_daemon_open_app(const char *pkgname);
-extern int menu_daemon_launch_app(const char *pkgname, bundle *b);
-
-extern bool menu_daemon_is_homescreen(pid_t pid);
-
-extern int menu_daemon_check_dead_signal(int pid);
-
-extern char *menu_daemon_get_selected_pkgname(void);
-extern void menu_daemon_open_homescreen(const char *pkgname);
-
-// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <bundle.h>
+#include <sys/types.h>
+#include <stdbool.h>
+
+extern void home_mgr_init(void *data);
+extern void home_mgr_fini(void);
+
+extern int home_mgr_check_dead_signal(int pid, void *data);
+extern int home_mgr_open_home(const char *pkgname);
+
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HW_KEY_H__
+#define __HW_KEY_H__
+
+#define KEY_VOLUMEUP "XF86AudioRaiseVolume"
+#define KEY_VOLUMEDOWN "XF86AudioLowerVolume"
+#define KEY_HOME "XF86Home"
+#define KEY_CONFIG "XF86Camera_Full"
+#define KEY_SEARCH "XF86Search"
+#define KEY_MEDIA "XF86AudioMedia"
+#define KEY_TASKSWITCH "XF86TaskPane"
+#define KEY_WEBPAGE "XF86WWW"
+#define KEY_MAIL "XF86Mail"
+#define KEY_VOICE "XF86Voice"
+#define KEY_APPS "XF86Apps"
+#define KEY_CONNECT "XF86Call"
+#define KEY_BACK "XF86Back"
+
+extern void hw_key_destroy_window(void);
+extern void hw_key_create_window(void);
+
+#endif
+
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCK_DAEMON_H__
+#define __LOCK_DAEMON_H__
+
+#include <Elementary.h>
+#include <E_DBus.h>
+#include <alarm.h>
+
+#include "window_mgr.h"
+
+#define _EDJ(x) elm_layout_edje_get(x)
+
+#define LOCK_MGR_DEFAULT_PKG_NAME "org.tizen.lockscreen"
+
+#ifdef TIZEN_BUILD_EMULATOR
+#define LOCK_MGR_DEFAULT_BG_PATH "/opt/share/settings/Wallpapers/Default.jpg"
+#else
+#define LOCK_MGR_DEFAULT_BG_PATH "/opt/share/settings/Wallpapers/Lock_default.png"
+#endif
+
+
+
+typedef enum {
+ LOCK_SOUND_LOCK,
+ LOCK_SOUND_UNLOCK,
+ LOCK_SOUND_BTN_KEY,
+ LOCK_SOUND_TAP,
+ LOCK_SOUND_MAX,
+} lock_sound_type_e;
+
+typedef enum {
+ LCD_STATE_ON,
+ LCD_STATE_OFF,
+ LCD_STATE_MAX,
+} lock_lcd_state_e;
+
+int lock_mgr_lcd_state_get(void);
+int lock_mgr_lock_pid_get(void);
+void lock_mgr_sound_play(lock_sound_type_e type);
+
+void lock_mgr_idle_lock_state_set(int lock_state);
+Eina_Bool lock_mgr_lockscreen_launch(void);
+
+int lock_mgr_daemon_start(void);
+void lock_mgr_daemon_end(void);
+
+#endif /* __LOCK_DAEMON_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCK_PWD_COMPLEX_H__
+#define __LOCK_PWD_COMPLEX_H__
+
+#include "lock_pwd_verification.h"
+
+Eina_Bool lock_pwd_complex_is_blocked_get(void);
+void lock_pwd_complex_event(lock_pwd_event_e event);
+Evas_Object *lock_pwd_complex_layout_create(void *data);
+void lock_pwd_complex_layout_del(void);
+void lock_pwd_complex_view_init(void);
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCK_PWD_CONTROL_PANEL_H__
+#define __LOCK_PWD_CONTROL_PANEL_H__
+
+void lock_pwd_control_panel_cancel_btn_enable_set(Eina_Bool enable);
+
+Evas_Object *lock_pwd_control_panel_create(Evas_Object *parent);
+void lock_pwd_control_panel_del(void);
+
+void lock_pwd_control_panel_pause(void);
+void lock_pwd_control_panel_resume(void);
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCK_PWD_SIMPLE_H__
+#define __LOCK_PWD_SIMPLE_H__
+
+#include <Elementary.h>
+
+#include "lock_pwd_verification.h"
+
+Eina_Bool lock_pwd_simple_is_blocked_get(void);
+Evas_Object *lock_pwd_simple_layout_create(void *data);
+void lock_pwd_simple_layout_del(void);
+void lock_pwd_simple_event(lock_pwd_event_e event);
+void lock_pwd_simple_view_init(void);
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCK_PWD_UTIL_H__
+#define __LOCK_PWD_UTIL_H__
+
+#define LOCK_PWD_EDJE_FILE "/usr/share/starter/res/edje/lock_pwd.edj"
+#define LOCK_PWD_BTN_EDJE_FILE "/usr/share/starter/res/edje/lock_btn.edj"
+
+int lock_pwd_util_win_width_get(void);
+int lock_pwd_util_win_height_get(void);
+
+void lock_pwd_util_create(Eina_Bool is_show);
+void lock_pwd_util_del(void);
+
+void lock_pwd_util_popup_create(char *title, char *text, Evas_Smart_Cb func, double timeout);
+
+void lock_pwd_util_view_init(void);
+void lock_pwd_util_back_key_relased(void);
+Evas_Object *lock_pwd_util_win_get(void);
+Eina_Bool lock_pwd_util_win_visible_get(void);
+void lock_pwd_util_win_show(void);
+void lock_pwd_util_win_hide(void);
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCK_PWD_VERIFICATION_H__
+#define __LOCK_PWD_VERIFICATION_H__
+
+#include <vconf.h>
+
+#define PASSWORD_ATTEMPTS_MAX_NUM 5
+#define MAX_PASSWORD_NUM 4
+#define INFINITE_ATTEMPT 0
+#define PASSWORD_BLOCK_SECONDS 30
+#define PASSWORD_TIMESTAMP_STR_LENGTH 512
+#define VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR VCONFKEY_SETAPPL_PREFIX"/phone_lock_timestamp"
+
+typedef enum {
+ PWD_EVENT_CORRECT = 0,
+ PWD_EVENT_INCORRECT_WARNING = 1,
+ PWD_EVENT_INCORRECT,
+ PWD_EVENT_INPUT_BLOCK_WARNING,
+ PWD_EVENT_INPUT_BLOCK,
+ PWD_EVENT_EMPTY,
+ PWD_EVENT_OVER,
+} lock_pwd_event_e;
+
+typedef struct {
+ unsigned int current_attempt;
+ unsigned int block_attempt;
+ unsigned int max_attempt;
+ unsigned int expire_sec;
+ unsigned int incorrect_count;
+ void *data;
+} lock_pwd_policy;
+
+int lock_pwd_verification_current_attempt_get(void);
+int lock_pwd_verification_remain_attempt_get(void);
+
+lock_pwd_event_e lock_pwd_verification_verify(const char *password);
+void lock_pwd_verification_policy_create(void);
+
+void lock_pwd_verification_popup_create(lock_pwd_event_e event);
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __POPUP_H__
+#define __POPUP_H__
+
+#include <Elementary.h>
+
+extern Evas_Object *popup_create(const char *title, const char *text);
+
+#endif
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __STARTER_H__
+#define __STARTER_H__
+
+#include <sys/time.h>
+
+struct appdata {
+ struct timeval tv_start; /* start time */
+ int lcd_status;
+};
+
+#endif /* __STARTER_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __PACKAGE_MGR_H__
+#define __PACKAGE_MGR_H__
+
+extern bool package_mgr_exist_app(char *appid);
+
+#endif /* __PACKAGE_MGR_H__ */
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __NOTIFIER_H__
-#define __NOTIFIER_H__
-#include <stdbool.h>
-
-#if !defined(PUBLIC)
-#define PUBLIC __attribute__((visibility("default")))
-#endif
-
-#if !defined(PROTECTED)
-#define PROTECTED __attribute__((visibility("hidden")))
-#endif
-
-#if !defined(PRIVATE)
-#define PRIVATE __attribute__((visibility("internal")))
-#endif
-
-
-struct desktop_notifier {
- int number;
- int ifd;
- Ecore_Fd_Handler *handler;
-};
-
-
-PRIVATE void pkg_event_init(void);
-PRIVATE void pkg_event_fini(void);
-
-#endif
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __PROCESS_MGR_H__
+#define __PROCESS_MGR_H__
+
+typedef struct _process_mgr_s *process_mgr_h;
+
+typedef void (*after_func)(int pid);
+typedef int (*change_func)(const char *, const char *, const char *, void *, void *);
+
+void process_mgr_must_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn);
+void process_mgr_must_open(const char *appid, change_func cfn, after_func afn);
+void process_mgr_must_syspopup_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn);
+
+extern void process_mgr_terminate_app(int lock_app_pid, int state);
+extern void process_mgr_kill_app(int lock_app_pid);
+
+extern int process_mgr_validate_app(int pid);
+extern int process_mgr_validate_call(int pid);
+
+extern int process_mgr_set_lock_priority(int pid);
+extern int process_mgr_set_pwlock_priority(int pid);
+
+#endif /* __PROCESS_MGR_H__ */
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __STARTER_UTIL_H__
-#define __STARTER_UTIL_H__
-
-#include <stdio.h>
-#include <sys/time.h>
-
-#define WRITE_FILE_LOG(fmt, arg...) do { \
- FILE *fp;\
- struct timeval tv; \
- gettimeofday(&tv, NULL); \
- fp = fopen("/var/log/boottime", "a+");\
- if (NULL == fp) break;\
- fprintf(fp, "%u%09u : "fmt"\n", (int) tv.tv_sec, (int) tv.tv_usec, ##arg); \
- fclose(fp);\
-} while (0)
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __STARTER_VCONF_H__
-#define __STARTER_VCONF_H__
-
-#define VCONF_PRIVATE_LOCKSCREEN_PKGNAME "file/private/lockscreen/pkgname"
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __STARTER_H__
-#define __STARTER_H__
-
-#include <sys/time.h>
-
-struct appdata {
- struct timeval tv_start;
-};
-
-#endif
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __STATUS_H__
+#define __STATUS_H__
+
+#include <Eina.h>
+
+#ifndef VCONFKEY_STARTER_RESERVED_APPS_STATUS
+/* 2 digits for reserved apps & popup */
+/* 0x01 : reserved apps */
+/* 0x10 : reserved popup */
+#define VCONFKEY_STARTER_RESERVED_APPS_STATUS "memory/starter/reserved_apps_status"
+#endif
+
+#ifndef VCONFKEY_SETUP_WIZARD_FIRST_BOOT
+#define VCONFKEY_SETUP_WIZARD_FIRST_BOOT "db/setup_wizard/first_boot"
+#endif
+
+#define VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT VCONFKEY_SETAPPL_PREFIX"/phone_lock_attempts_left"
+
+typedef enum {
+ STATUS_ACTIVE_KEY_INVALID = -1,
+ STATUS_ACTIVE_KEY_PM_STATE = 0,
+ STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME,
+ STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT,
+ STATUS_ACTIVE_KEY_STARTER_SEQUENCE,
+ STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS,
+ STATUS_ACTIVE_KEY_LANGSET,
+ STATUS_ACTIVE_KEY_MAX,
+} status_active_key_e;
+
+struct status_active_s {
+ Eina_List *list[STATUS_ACTIVE_KEY_MAX];
+ char *setappl_selected_package_name;
+ int setappl_screen_lock_type_int;
+ char *langset;
+ int pm_state;
+ int starter_sequence;
+ int sysman_power_off_status;
+};
+
+struct status_passive_s {
+ int setup_wizard_state;
+ int wms_wakeup_by_gesture_setting;
+ int setup_wizard_first_boot;
+
+ int pm_key_ignore;
+ int pm_state;
+ int call_state;
+ int idle_lock_state;
+ int setappl_password_attempts_left_int;
+ int remote_lock_islocked;
+ int setappl_psmode;
+ int starter_reserved_apps_status;
+ int setappl_sound_lock_bool;
+ int setappl_motion_activation;
+ int setappl_use_pick_up;
+ int setappl_accessibility_lock_time_int;
+ int idle_screen_safemode;
+ int boot_animation_finished;
+ int setappl_ambient_mode_bool;
+
+ char *setappl_3rd_lock_pkg_name_str;
+};
+typedef struct status_passive_s *status_passive_h;
+typedef struct status_active_s *status_active_h;
+typedef int (*status_active_cb)(status_active_key_e key, void *data);
+
+extern status_active_h status_active_get(void);
+extern status_passive_h status_passive_get(void);
+
+int status_active_register_cb(status_active_key_e key, status_active_cb func, void *data);
+int status_active_unregister_cb(status_active_key_e key, status_active_cb func);
+
+extern int status_register(void);
+extern void status_unregister(void);
+
+#endif //__STATUS_H__
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef __MENU_DAEMON_UTIL_H__
#define __MENU_DAEMON_UTIL_H__
#include <dlog.h>
#include <stdio.h>
#include <sys/time.h>
-
-#define HOME_SCREEN_PKG_NAME "org.tizen.menu-screen"
+#include <app.h>
+
+#define APP_TRAY_PKG_NAME "org.tizen.app-tray"
+#define MENU_SCREEN_PKG_NAME "org.tizen.menu-screen"
+#define PROVIDER_PKG_NAME "org.tizen.data-provider-master"
+#define CLUSTER_HOME_PKG_NAME "org.tizen.cluster-home"
+#define EASY_HOME_PKG_NAME "org.tizen.easy-home"
+#define EASY_APPS_PKG_NAME "org.tizen.easy-apps"
+#define HOMESCREEN_PKG_NAME "org.tizen.homescreen"
+#define TASKMGR_PKG_NAME "org.tizen.task-mgr"
+#define DEFAULT_TASKMGR_PKG_NAME "org.tizen.taskmgr"
#define CONF_PATH_NUMBER 1024
+#define BUF_SIZE_16 16
+#define BUF_SIZE_32 32
+#define BUF_SIZE_128 128
+#define BUF_SIZE_256 256
+#define BUF_SIZE_512 512
+#define BUF_SIZE_1024 1024
+
+
#ifdef LOG_TAG
#undef LOG_TAG
-#define LOG_TAG "starter"
+#define LOG_TAG "STARTER"
#endif
/* Log */
#define _E(fmt, arg...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
#endif
+#if !defined(_SECURE_W)
+#define _SECURE_W(fmt, arg...) SECURE_LOGW("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(_SECURE_D)
+#define _SECURE_D(fmt, arg...) SECURE_LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(_SECURE_E)
+#define _SECURE_E(fmt, arg...) SECURE_LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#endif
+
#define retv_if(expr, val) do { \
if(expr) { \
_E("(%s) -> %s() return", #expr, __FUNCTION__); \
fclose(fp);\
} while (0)
+#if !defined(_)
+#define _(str) dgettext(PACKAGE, str)
+#endif
+
+#if !defined(S_)
+#define S_(str) dgettext("sys_string", str)
+#endif
#endif /* __MENU_DAEMON_UTIL_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CLOCK_MGR_H__
+#define __CLOCK_MGR_H__
+
+void clock_mgr_init(void);
+void clock_mgr_fini(void);
+
+#endif /* __CLOCK_MGR_H__*/
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HOME_MGR_H__
+#define __HOME_MGR_H__
+
+extern void home_mgr_launch_home(void);
+extern void home_mgr_launch_home_first(void);
+extern void home_mgr_launch_home_by_power(void);
+
+extern void home_mgr_init(void);
+extern void home_mgr_fini(void);
+
+#endif /* __HOME_MGR_H__*/
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HOURLY_ALERT_H__
+#define __HOURLY_ALERT_H__
+
+
+void hourly_alert_init(void);
+void hourly_alert_fini(void);
+
+#endif /* __HOURLY_ALERT_H__ */
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+extern void hw_key_destroy_window(void);
+extern void hw_key_create_window(void);
+
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __WINDOW_MGR_H__
+#define __WINDOW_MGR_H__
+
+typedef struct _lockw_data lockw_data;
+
+int window_mgr_get_focus_window_pid(void);
+Eina_Bool window_mgr_set_prop(lockw_data * data, int lock_app_pid, void *event);
+Eina_Bool window_mgr_set_effect(lockw_data * data, int lock_app_pid, void *event);
+
+void window_mgr_set_scroll_prop(lockw_data * data, int lock_type);
+void window_mgr_register_event(void *data, lockw_data * lockw,
+ Eina_Bool (*create_cb) (void *, int, void *),
+ Eina_Bool (*show_cb) (void *, int, void *),
+ Eina_Bool (*hide_cb) (void *, int, void *));
+void window_mgr_unregister_event(lockw_data * lockw);
+
+lockw_data *window_mgr_init(void);
+void window_mgr_fini(lockw_data *lockw);
+
+Evas_Object *window_mgr_pwd_lock_win_create(void);
+
+#endif /* __WINDOW_MGR_H__ */
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __STARTER_X11_H__
-#define __STARTER_X11_H__
-
-void prop_string_set(const char *name, const char *value);
-void prop_int_set(const char *name, unsigned int val);
-void set_window_scale(void);
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __MENU_DAEMON_XMONITOR_H__
-#define __MENU_DAEMON_XMONITOR_H__
-
-extern int xmonitor_init(void);
-extern void xmonitor_fini(void);
-
-#endif /* __MENU_DAEMON_XMONITOR_H__ */
+++ /dev/null
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT(lock-setting C)
-
-ADD_SUBDIRECTORY(lockscreen-options)
-
-# i18n
-ADD_SUBDIRECTORY(po)
-
-# End of a file
+++ /dev/null
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT(ug-lockscreen-options C)
-
-SET(PREFIX ${CMAKE_INSTALL_PREFIX}/ug)
-SET(LIBDIR "${PREFIX}/lib")
-SET(RESDIR "${PREFIX}/res")
-SET(DATADIR "${PREFIX}/data")
-SET(LOCALEDIR "${RESDIR}/locale")
-SET(IMAGEDIR "${RESDIR}/images")
-SET(EDJEDIR "${RESDIR}/edje")
-SET(ETCDIR "${RESDIR}/etc")
-SET(VERSION 0.1.0)
-
-SET(SRCS
- ./src/lockscreen-options.c
- ./src/lockscreen-options-util.c
- ./src/lockscreen-options-main.c
-)
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs_lock-screen-options REQUIRED elementary ui-gadget-1 edje evas ail capi-appfw-application)
-
-FOREACH(flag ${pkgs_lock-screen-options_CFLAGS})
- SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
-ENDFOREACH(flag)
-
-SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
-
-ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
-
-ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
-SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0)
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_lock-screen-options_LDFLAGS})
-
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR})
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCKSCREEN_OPTIONS_DEBUG_H__
-#define __LOCKSCREEN_OPTIONS_DEBUG_H__
-
-#include <stdio.h>
-
-#define OPENLOCK_USING_PLATFORM_DEBUG
-
-#ifdef OPENLOCK_USING_PLATFORM_DEBUG
-#ifndef LOG_TAG
-#define LOG_TAG "lockscreen-options"
-#endif
-#include <dlog.h>
-
-#define LOCKOPTIONS_DBG(fmt, args...) LOGD("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args)
-#define LOCKOPTIONS_WARN(fmt, args...) LOGW("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args)
-#define LOCKOPTIONS_ERR(fmt, args...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args)
-#else
-#define LOCKOPTIONS_DBG(fmt, args...) do{printf("[LOCKOPTIONS_DBG][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0);
-#define LOCKOPTIONS_WARN(fmt, args...) do{printf("[LOCKOPTIONS_WARN][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0);
-#define LOCKOPTIONS_ERR(fmt, args...) do{printf("[LOCKOPTIONS_ERR][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0);
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCKSCREEN_OPTIONS_MAIN_H__
-#define __LOCKSCREEN_OPTIONS_MAIN_H__
-
-#include <Elementary.h>
-#include "lockscreen-options.h"
-
-void lockscreen_options_main_create_view(lockscreen_options_ug_data * ug_data);
-void lockscreen_options_main_update_view();
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCKSCREEN_OPTIONS_UTIL_H__
-#define __LOCKSCREEN_OPTIONS_UTIL_H__
-
-#include <Elementary.h>
-
-enum {
- IDS_COM_SK_OK = 0,
- IDS_COM_SK_CANCEL,
- IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX,
-};
-
-enum {
- IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS =
- IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX,
- IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP,
- IDS_LOCKSCREEN_OPTIONS_CLOCK,
- IDS_LOCKSCREEN_OPTIONS_HELPTEXT,
- IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP,
- IDS_LOCKSCREEN_OPTIONS_APP_STRING_MAX,
-};
-
-Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent);
-Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent,
- const char *file,
- const char *group);
-void lockscreen_options_util_create_seperator(Evas_Object * genlist);
-void lockscreen_options_util_create_underline(Evas_Object * genlist);
-char *lockscreen_optoins_get_string(int id);
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef __LOCKSCREEN_OPTIONS_H__
-#define __LOCKSCREEN_OPTIONS_H__
-
-#include <Elementary.h>
-#include <libintl.h>
-#include <ui-gadget.h>
-
-#define PKGNAME "ug-lockscreen-options"
-
-#define _EDJ(o) elm_layout_edje_get(o)
-#define _S(str) dgettext("sys_string", str)
-#define _(s) dgettext(PKGNAME, s)
-#define dgettext_noop(s) (s)
-#define N_(s) dgettext_noop(s)
-
-enum{
- ENUM_LOCKSCREEN_GENLIST_STYLE_SEPERATOR = 0,
- ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON,
- ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON,
- ENUM_LOCKSCREEN_GENLIST_STYLE_HELP,
- ENUM_LOCKSCREEN_GENLIST_STYLE_UNDERLINE
-};
-
-#define LOCKSCREEN_GENLIST_STYLE_SEPERATOR "dialogue/separator/21/with_line"
-#define LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON "dialogue/1text.1icon"
-#define LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON "dialogue/2text.1icon.6"
-#define LOCKSCREEN_GENLIST_STYLE_HELP "multiline/1text"
-#define LOCKSCREEN_GENLIST_STYLE_UNDERLINE "dialogue/separator/1/with_line"
-
-
-typedef struct _lockscreen_options_ug_data {
- int index;
-
- Evas_Object *win_main;
- Evas_Object *base;
- ui_gadget_h ug;
-
- Evas_Object *navi_bar;
-
- Elm_Gen_Item_Class itc_separator;
- Elm_Gen_Item_Class itc_menu_1text1icon;
- Elm_Gen_Item_Class itc_help_1text;
-
-} lockscreen_options_ug_data;
-
-#endif
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <vconf.h>
-#include <vconf-keys.h>
-#include <ui-gadget.h>
-#include <ui-gadget-module.h>
-#include <ail.h>
-
-#include "lockscreen-options.h"
-#include "lockscreen-options-debug.h"
-#include "lockscreen-options-main.h"
-#include "lockscreen-options-util.h"
-
-#include "starter-vconf.h"
-
-#define LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT 5
-
-typedef struct {
- int glStyle;
- int stringId;
- Evas_Object *check;
- void (*func) (void *data, Evas_Object * obj, void *event_info);
-} lockscreen_menu_item_info;
-
-static lockscreen_menu_item_info lockscreen_options_menu_item[] = {
- {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS, NULL, NULL},
- {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, NULL, NULL},
- {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_CLOCK, NULL, NULL},
- {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_HELPTEXT, NULL, NULL},
- {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, NULL, NULL}
-};
-
-static Elm_Gen_Item_Class itc_menu_1text1icon;
-static Elm_Gen_Item_Class itc_menu_2text1icon;
-static Elm_Gen_Item_Class itc_help_1text;
-
-static void _lockscreen_options_main_back_cb(void *data, Evas_Object * obj,
- void *event_info)
-{
- lockscreen_options_ug_data *ug_data =
- (lockscreen_options_ug_data *) data;
-
- if (ug_data == NULL)
- return;
-
- ug_destroy_me(ug_data->ug);
-}
-
-static char *_lockscreen_options_main_gl_label_get(void *data,
- Evas_Object * obj,
- const char *part)
-{
- if (data == NULL || part == NULL)
- return NULL;
-
- lockscreen_menu_item_info *lockoption_data =
- (lockscreen_menu_item_info *) data;
-
- if ((strcmp(part, "elm.text") == 0) ||
- (strcmp(part, "elm.text.1") == 0)) {
- return
- strdup(lockscreen_optoins_get_string
- (lockoption_data->stringId));
- }
-
- return NULL;
-
-}
-
-static void _lockscreen_options_set_menu_status(int stringId, int value)
-{
- int ret = 0;
- switch (stringId) {
- case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS:
- ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, value);
- break;
- case IDS_LOCKSCREEN_OPTIONS_CLOCK:
- ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, value);
- break;
- case IDS_LOCKSCREEN_OPTIONS_HELPTEXT:
- ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, value);
- break;
- default:
- LOCKOPTIONS_DBG("NO VALID STRINGID %d", stringId);
- break;
- }
-}
-
-static bool _lockscreen_options_get_menu_status(int stringId)
-{
- int status = 0;
- int ret = 0;
-
- switch (stringId) {
- case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS:
- ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, &status);
- break;
- case IDS_LOCKSCREEN_OPTIONS_CLOCK:
- ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, &status);
- break;
- case IDS_LOCKSCREEN_OPTIONS_HELPTEXT:
- ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, &status);
- break;
- default:
- LOCKOPTIONS_DBG("NO VALID INDEX %d", stringId);
- break;
- }
-
- if (ret == -1) {
- LOCKOPTIONS_ERR("Failed to get vconfkey %d!", stringId);
- return 0;
- }
-
- LOCKOPTIONS_DBG
- ("_lockscreen_options_get_menu_status index %d Status %d", stringId,
- status);
-
- return status;
-}
-
-static void _lockscreen_options_check_changed_cb(void *data, Evas_Object * obj,
- void *event_info)
-{
- if (data == NULL || obj == NULL)
- return;
-
- lockscreen_menu_item_info *lockoption_data =
- (lockscreen_menu_item_info *) data;
-
- Eina_Bool ret;
- int value = 0;
-
- ret = elm_check_state_get(obj);
-
- LOCKOPTIONS_DBG("_lockscreen_options_check_changed_cb : %s",
- ret == EINA_TRUE ? "ON" : "OFF");
-
- if (ret == EINA_TRUE) {
- value = 1;
- } else {
- value = 0;
- }
-
- _lockscreen_options_set_menu_status(lockoption_data->stringId, value);
-}
-
-static Evas_Object *_lockscreen_options_main_gl_icon_get(void *data,
- Evas_Object * obj,
- const char *part)
-{
- if (data == NULL || obj == NULL)
- return NULL;
-
- lockscreen_menu_item_info *lockoption_data =
- (lockscreen_menu_item_info *) data;
-
- LOCKOPTIONS_DBG("icon get stringId : %d", lockoption_data->stringId);
-
- Evas_Object *check;
- int value = 0;
-
- check = elm_check_add(obj);
- elm_object_style_set(check, "on&off");
- evas_object_show(check);
-
- value = _lockscreen_options_get_menu_status(lockoption_data->stringId);
- elm_check_state_set(check, value);
-
- evas_object_pass_events_set(check, 1);
- evas_object_propagate_events_set(check, 0);
-
- evas_object_smart_callback_add(check, "changed",
- _lockscreen_options_check_changed_cb,
- lockoption_data);
-
- lockoption_data->check = check;
-
- return check;
-}
-
-static void _lockscreen_options_main_gl_del(void *data, Evas_Object * obj)
-{
- LOCKOPTIONS_DBG("_lockscreen_options_main_gl_del");
-}
-
-static void _lockscreen_options_main_gl_sel(void *data, Evas_Object * obj,
- void *event_info)
-{
- if (data == NULL)
- return;
-
- lockscreen_menu_item_info *lockoption_data = NULL;
-
- elm_genlist_item_selected_set((Elm_Object_Item *) event_info,
- EINA_FALSE);
-
- Elm_Object_Item *item = (Elm_Object_Item *) event_info;
- lockoption_data =
- (lockscreen_menu_item_info *) elm_object_item_data_get(item);
- if (lockoption_data == NULL) {
- return;
- }
-
- if (lockoption_data->stringId ==
- IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS
- || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_CLOCK
- || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_HELPTEXT) {
- Eina_Bool check_state =
- elm_check_state_get(lockoption_data->check);
- _lockscreen_options_set_menu_status(lockoption_data->stringId,
- !check_state);
- elm_genlist_item_update(item);
- }
-
- if (lockoption_data->func != NULL) {
- lockoption_data->func(data, obj, event_info);
- }
-}
-
-static void _lockscreen_options_create_gl_item(Elm_Gen_Item_Class * item,
- int glStyle)
-{
- if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) {
- item->item_style = LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON;
- item->func.text_get = _lockscreen_options_main_gl_label_get;
- item->func.content_get = _lockscreen_options_main_gl_icon_get;
- item->func.state_get = NULL;
- item->func.del = _lockscreen_options_main_gl_del;
- } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) {
- item->item_style = LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON;
- item->func.text_get = _lockscreen_options_main_gl_label_get;
- item->func.content_get = _lockscreen_options_main_gl_icon_get;
- item->func.state_get = NULL;
- item->func.del = NULL;
- } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) {
- item->item_style = LOCKSCREEN_GENLIST_STYLE_HELP;
- item->func.text_get = _lockscreen_options_main_gl_label_get;
- item->func.content_get = NULL;
- item->func.state_get = NULL;
- item->func.del = _lockscreen_options_main_gl_del;
- } else {
- LOCKOPTIONS_DBG("_lockscreen_options_create_gl_item FAIL\n");
- }
-}
-
-void lockscreen_options_main_create_view(lockscreen_options_ug_data * ug_data)
-{
- LOCKOPTIONS_DBG("lockscreen_options_main_create_view begin\n");
-
- Evas_Object *navi_bar = ug_data->navi_bar;
- Evas_Object *back_button = NULL;
- Evas_Object *genlist = NULL;
- Elm_Object_Item *item = NULL;
- int i = 0;
-
- if (navi_bar == NULL) {
- LOCKOPTIONS_WARN("navi_bar is null.");
- return;
- }
-
- _lockscreen_options_create_gl_item(&(itc_menu_1text1icon),
- ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON);
- _lockscreen_options_create_gl_item(&(itc_menu_2text1icon),
- ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON);
- _lockscreen_options_create_gl_item(&(itc_help_1text),
- ENUM_LOCKSCREEN_GENLIST_STYLE_HELP);
-
- genlist = elm_genlist_add(navi_bar);
-
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
- elm_object_style_set(genlist, "dialogue");
-
- lockscreen_options_util_create_seperator(genlist);
-
- for (i = 0; i < LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT; i++) {
- Elm_Gen_Item_Class *itc = NULL;
- if (lockscreen_options_menu_item[i].glStyle ==
- ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) {
- itc = &(itc_menu_1text1icon);
- elm_genlist_item_append(genlist,
- itc,
- &
- (lockscreen_options_menu_item
- [i]), NULL,
- ELM_GENLIST_ITEM_NONE,
- _lockscreen_options_main_gl_sel,
- ug_data);
- } else if(lockscreen_options_menu_item[i].glStyle ==
- ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) {
- itc = &(itc_menu_2text1icon);
- elm_genlist_item_append(genlist,
- itc,
- &
- (lockscreen_options_menu_item
- [i]), NULL,
- ELM_GENLIST_ITEM_NONE,
- _lockscreen_options_main_gl_sel,
- ug_data);
- } else if (lockscreen_options_menu_item[i].glStyle ==
- ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) {
- itc = &(itc_help_1text);
- item = elm_genlist_item_append(genlist,
- itc,
- &
- (lockscreen_options_menu_item
- [i]), NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL, NULL);
- elm_genlist_item_select_mode_set(item,
- ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
- if(i != (LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT - 1)){
- lockscreen_options_util_create_underline(genlist);
- }
- } else {
- LOCKOPTIONS_WARN("lockscreen option has no such type.");
- return;
- }
- }
-
- back_button = elm_button_add(navi_bar);
- elm_object_style_set(back_button, "naviframe/back_btn/default");
- evas_object_smart_callback_add(back_button, "clicked",
- _lockscreen_options_main_back_cb,
- ug_data);
-
- elm_naviframe_item_push(navi_bar, _("IDS_ST_BODY_LOCK_SCREEN") , back_button, NULL, genlist, NULL);
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "lockscreen-options-debug.h"
-#include "lockscreen-options.h"
-#include "lockscreen-options-util.h"
-
-const char *sys_str_table[] = {
- "IDS_COM_SK_OK",
- "IDS_COM_SK_CANCEL",
-};
-
-const char *app_str_table[] = {
- "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS",
- "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN",
- "IDS_ST_BODY_CLOCK",
- "IDS_IM_BODY_HELP_TEXT",
- "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN"
-};
-
-static Elm_Gen_Item_Class itc_underline;
-static Elm_Gen_Item_Class itc_separator;
-
-Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent)
-{
- Evas_Object *navi_bar = NULL;
-
- if (parent == NULL) {
- LOCKOPTIONS_WARN("Parent is null.");
- return NULL;
- }
-
- navi_bar = elm_naviframe_add(parent);
- if (navi_bar == NULL) {
- LOCKOPTIONS_ERR("Cannot add naviagtionbar.");
- return NULL;
- }
-
- elm_object_part_content_set(parent, "elm.swallow.content", navi_bar);
-
- evas_object_show(navi_bar);
-
- return navi_bar;
-}
-
-Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent,
- const char *file,
- const char *group)
-{
- Evas_Object *layout = NULL;
-
- if (parent == NULL) {
- LOCKOPTIONS_WARN("Parent is null.");
- return NULL;
- }
-
- layout = elm_layout_add(parent);
- if (layout == NULL) {
- LOCKOPTIONS_ERR("Cannot add layout.");
- return NULL;
- }
-
- if ((file != NULL) && (group != NULL)) {
- elm_layout_file_set(layout, file, group);
- }
-
- evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
-
- evas_object_show(layout);
-
- return layout;
-}
-
-void lockscreen_options_util_create_seperator(Evas_Object * genlist)
-{
- if (NULL == genlist)
- return;
-
- Elm_Object_Item *item = NULL;
-
- itc_separator.item_style = LOCKSCREEN_GENLIST_STYLE_SEPERATOR;
- itc_separator.func.text_get = NULL;
- itc_separator.func.content_get = NULL;
- itc_separator.func.state_get = NULL;
- itc_separator.func.del = NULL;
-
- item =
- elm_genlist_item_append(genlist, &(itc_separator), NULL, NULL,
- ELM_GENLIST_ITEM_NONE, NULL, NULL);
- elm_genlist_item_select_mode_set(item,
- ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-}
-
-void lockscreen_options_util_create_underline(Evas_Object * genlist)
-{
- if (NULL == genlist)
- return;
-
- Elm_Object_Item *item = NULL;
-
- itc_underline.item_style = LOCKSCREEN_GENLIST_STYLE_UNDERLINE;
- itc_underline.func.text_get = NULL;
- itc_underline.func.content_get = NULL;
- itc_underline.func.state_get = NULL;
- itc_underline.func.del = NULL;
-
- item =
- elm_genlist_item_append(genlist, &(itc_underline), NULL, NULL,
- ELM_GENLIST_ITEM_NONE, NULL, NULL);
- elm_genlist_item_select_mode_set(item,
- ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-}
-
-char *lockscreen_optoins_get_string(int id)
-{
- LOCKOPTIONS_DBG("get string id : %d\n", id);
-
- char *str = NULL;
-
- if (id < IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX) {
- str = dgettext("sys_string", sys_str_table[id]);
- } else {
- str =
- dgettext(PKGNAME,
- app_str_table[id -
- IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX]);
- }
-
- LOCKOPTIONS_DBG("get string : %s\n", str);
-
- return str;
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#ifndef UG_MODULE_API
-#define UG_MODULE_API __attribute__ ((visibility("default")))
-#endif
-
-#include <Elementary.h>
-#include <ui-gadget-module.h>
-
-#include "lockscreen-options.h"
-#include "lockscreen-options-util.h"
-#include "lockscreen-options-main.h"
-
-static Evas_Object *create_bg(Evas_Object * parent)
-{
- Evas_Object *bg = elm_bg_add(parent);
-
- evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
- elm_object_style_set(bg, "group_list");
-
- elm_object_part_content_set(parent, "elm.swallow.bg", bg);
- evas_object_show(bg);
-
- return bg;
-}
-
-static Evas_Object *create_fullview(Evas_Object * parent,
- lockscreen_options_ug_data * ug_data)
-{
- Evas_Object *base = NULL;
- Evas_Object *navi_bar = NULL;
-
- base = lockscreen_options_util_create_layout(parent, NULL, NULL);
-
- elm_layout_theme_set(base, "layout", "application", "default");
- elm_win_resize_object_add(parent, base);
-
- elm_win_indicator_mode_set(parent, ELM_WIN_INDICATOR_SHOW);
-
- create_bg(base);
-
- navi_bar = lockscreen_options_util_create_navigation(base);
- ug_data->navi_bar = navi_bar;
-
- lockscreen_options_main_create_view(ug_data);
-
- return base;
-}
-
-static Evas_Object *create_frameview(Evas_Object * parent,
- lockscreen_options_ug_data * ug_data)
-{
- Evas_Object *base = NULL;
-
- return base;
-}
-
-static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service,
- void *priv)
-{
- Evas_Object *parent = NULL;
- Evas_Object *win_main = NULL;
- lockscreen_options_ug_data *ug_data = NULL;
-
- if (!ug || !priv)
- return NULL;
-
- bindtextdomain(PKGNAME, "/usr/ug/res/locale");
-
- ug_data = priv;
- ug_data->ug = ug;
-
- parent = ug_get_parent_layout(ug);
- if (!parent)
- return NULL;
-
- win_main = ug_get_window();
- if (!win_main) {
- return NULL;
- }
-
- ug_data->win_main = win_main;
-
- if (mode == UG_MODE_FULLVIEW)
- ug_data->base = create_fullview(parent, ug_data);
- else
- ug_data->base = create_frameview(parent, ug_data);
-
- return ug_data->base;
-}
-
-static void on_start(ui_gadget_h ug, service_h service, void *priv)
-{
-}
-
-static void on_pause(ui_gadget_h ug, service_h service, void *priv)
-{
-
-}
-
-static void on_resume(ui_gadget_h ug, service_h service, void *priv)
-{
-
-}
-
-static void on_destroy(ui_gadget_h ug, service_h service, void *priv)
-{
- lockscreen_options_ug_data *ug_data;
-
- if (!ug || !priv)
- return;
-
- ug_data = priv;
- evas_object_del(ug_data->base);
- ug_data->base = NULL;
-}
-
-static void on_message(ui_gadget_h ug, service_h msg, service_h service,
- void *priv)
-{
-}
-
-static void on_event(ui_gadget_h ug, enum ug_event event, service_h service,
- void *priv)
-{
- switch (event) {
- case UG_EVENT_LOW_MEMORY:
- break;
- case UG_EVENT_LOW_BATTERY:
- break;
- case UG_EVENT_LANG_CHANGE:
- break;
- case UG_EVENT_ROTATE_PORTRAIT:
- break;
- case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
- break;
- case UG_EVENT_ROTATE_LANDSCAPE:
- break;
- case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
- break;
- default:
- break;
- }
-}
-
-static void on_key_event(ui_gadget_h ug, enum ug_key_event event,
- service_h service, void *priv)
-{
- if (!ug)
- return;
-
- switch (event) {
- case UG_KEY_EVENT_END:
- ug_destroy_me(ug);
- break;
- default:
- break;
- }
-}
-
-UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
-{
- lockscreen_options_ug_data *ug_data;
-
- if (!ops)
- return -1;
-
- ug_data = calloc(1, sizeof(lockscreen_options_ug_data));
- if (!ug_data)
- return -1;
-
- ops->create = on_create;
- ops->start = on_start;
- ops->pause = on_pause;
- ops->resume = on_resume;
- ops->destroy = on_destroy;
- ops->message = on_message;
- ops->event = on_event;
- ops->key_event = on_key_event;
- ops->priv = ug_data;
- ops->opt = UG_OPT_INDICATOR_ENABLE;
-
- return 0;
-}
-
-UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
-{
- lockscreen_options_ug_data *ug_data;
-
- if (!ops)
- return;
-
- ug_data = ops->priv;
- if (ug_data)
- free(ug_data);
-}
+++ /dev/null
-# 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})
+++ /dev/null
-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 "نص المساعدة"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "Помощен текст"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "Κείμενο βοήθειας"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "सहायता टेक्स्ट"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "Օգնության տեքստ"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "ヘルプ"
-
+++ /dev/null
-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 "დამხმარე ტექსტი"
-
+++ /dev/null
-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 "Анықтама мәтіні"
-
+++ /dev/null
-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 "도움말"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "Текст за помош"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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ţă"
-
+++ /dev/null
-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 "Текст справки"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "Текст довідки"
-
+++ /dev/null
-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"
-
+++ /dev/null
-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 "帮助文本"
-
+++ /dev/null
-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 "說明文字"
-
+++ /dev/null
-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 "帮助文本"
-
+++ /dev/null
-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 "說明文字"
-
--- /dev/null
+[Unit]
+Description=Pre actions for "starter"
+
+[Service]
+Type=oneshot
+ExecStart=/etc/init.d/rd3starter
+++ /dev/null
-* Thu Aug 1 21:47:53 UTC 2013 - tracy.graydon@intel.com
-- Fix lang rpmlint errors and invalid group
-
+++ /dev/null
-<manifest>
- <request>
- <domain name="_"/>
- </request>
-</manifest>
[Unit]
Description=Start the "starter" program
-Before=core-efl.target
-After=boot-animation.service
+Requires=starter-pre.service
+After=starter-pre.service wm_ready.service ac.service deviced.service launchpad-preload.service
[Service]
ExecStart=/usr/bin/starter
Restart=always
-RestartSec=3
+RestartSec=0
+KillSignal=SIGKILL
+User=system
+Group=system
+SmackProcessLabel=starter
[Install]
-WantedBy=core-efl.target
+WantedBy=tizen-system.target
-%bcond_with x
-%bcond_with wayland
-
+#sbs-git:slp/pkgs/s/starter starter 0.3 f75832f2c50c8930cf1a6bfcffbac648bcde87d9
Name: starter
Summary: starter
-Version: 0.4.62
-Release: 3
-Group: Base/Startup
-License: TO_BE/FILLED_IN
+Version: 0.5.52
+Release: 1
+Group: TO_BE/FILLED_IN
+License: Apache-2.0
Source0: starter-%{version}.tar.gz
Source1: starter.service
Source2: starter.path
-Source1001: starter.manifest
-Requires(post): /usr/bin/vconftool
+Source3: starter-pre.service
BuildRequires: cmake
-BuildRequires: pkgconfig(ail)
BuildRequires: pkgconfig(appcore-efl)
BuildRequires: pkgconfig(aul)
BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-appfw-app-manager)
BuildRequires: pkgconfig(capi-system-media-key)
+BuildRequires: pkgconfig(capi-network-bluetooth)
+BuildRequires: pkgconfig(capi-system-system-settings)
+
+%if "%{?profile}" == "mobile"
+BuildRequires: tts
+BuildRequires: tts-devel
+#BuildRequires: pkgconfig(capi-message-port)
+BuildRequires: pkgconfig(security-server)
+BuildRequires: pkgconfig(efl-assist)
+%endif
+
+BuildRequires: pkgconfig(feedback)
BuildRequires: pkgconfig(db-util)
BuildRequires: pkgconfig(dlog)
BuildRequires: pkgconfig(ecore)
BuildRequires: pkgconfig(edje)
-BuildRequires: pkgconfig(eet)
+BuildRequires: pkgconfig(edbus)
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)
-%if %{with x}
-BuildRequires: pkgconfig(utilX)
-BuildRequires: pkgconfig(x11)
-BuildRequires: pkgconfig(xcomposite)
-BuildRequires: pkgconfig(xext)
-BuildRequires: pkgconfig(ecore-x)
-%endif
+#BuildRequires: pkgconfig(utilX)
BuildRequires: pkgconfig(vconf)
-BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(alarm-service)
BuildRequires: pkgconfig(pkgmgr-info)
+BuildRequires: pkgconfig(deviced)
+BuildRequires: pkgconfig(edbus)
+BuildRequires: pkgconfig(dbus-1)
+BuildRequires: pkgconfig(dbus-glib-1)
+#BuildRequires: model-build-features
BuildRequires: cmake
BuildRequires: edje-bin
-BuildRequires: gettext
-BuildRequires: gettext-tools
-
+BuildRequires: gettext
+BuildRequires: gettext-tools
Requires(post): /usr/bin/vconftool
+Requires: sys-assert
%define _systemddir /usr/lib/systemd
%define _userdir %{_systemddir}/user
%description
Description: Starter
+
%prep
%setup -q
-cp %{SOURCE1001} .
%build
-%cmake . \
-%if %{with wayland} && !%{with x}
--Dwith_wayland=TRUE
+%if 0%{?sec_build_binary_debug_enable}
+export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE"
+export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE"
+%endif
+
+%if "%{?profile}" == "mobile"
+echo "profile is 'mobile'"
+%define TIZEN_PROFILE_NAME "MOBILE"
+export CFLAGS="$CFLAGS -DTIZEN_PROFILE_MOBILE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_PROFILE_MOBILE"
+%else if "%{?profile}" == "wearable"
+echo "profile is 'wearable'"
+%define TIZEN_PROFILE_NAME "WEARABLE"
+export CFLAGS="$CFLAGS -DTIZEN_PROFILE_WEARABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_PROFILE_WEARABLE"
+%endif
+
+%ifarch %{arm}
+export CFLAGS="$CFLAGS -DTIZEN_BUILD_TARGET"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_BUILD_TARGET"
%else
--Dwith_x=TRUE
+export CFLAGS="$CFLAGS -DTIZEN_BUILD_EMULATOR"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_BUILD_EMULATOR"
%endif
+cmake . -DTIZEN_PROFILE_NAME=%{TIZEN_PROFILE_NAME} -DCMAKE_INSTALL_PREFIX=%{_prefix}
+
+make
make -j1
%install
rm -rf %{buildroot}
%make_install
-mkdir -p %{buildroot}/usr/share/license
mkdir -p %{buildroot}%{_userdir}
install -m 0644 %SOURCE1 %{buildroot}%{_userdir}/
install -m 0644 %SOURCE2 %{buildroot}%{_userdir}/
mkdir -p %{buildroot}%{_wantsdir}
ln -s ../starter.path %{buildroot}%{_wantsdir}/starter.path
+
+mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
+install -m 0644 %SOURCE1 %{buildroot}%{_libdir}/systemd/system/starter.service
+install -m 0644 %SOURCE3 %{buildroot}%{_libdir}/systemd/system/starter-pre.service
+ln -s ../starter.service %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants/starter.service
+mkdir -p %{buildroot}%{_libdir}/systemd/system/tizen-system.target.wants
+install -m 0644 %SOURCE2 %{buildroot}%{_libdir}/systemd/system/wait-lock.service
+ln -s ../wait-lock.service %{buildroot}%{_libdir}/systemd/system/tizen-system.target.wants/
mkdir -p %{buildroot}/usr/share/license
-cp -f LICENSE.Flora %{buildroot}/usr/share/license/%{name}
+cp -f LICENSE %{buildroot}/usr/share/license/%{name}
mkdir -p %{buildroot}/opt/data/home-daemon
-%find_lang ug-lockscreen-options
+mkdir -p %{buildroot}%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/
+ln -s %{_libdir}/systemd/system/starter.service %{buildroot}%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/
+ln -s %{_libdir}/systemd/system/starter-pre.service %{buildroot}%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/
%post
change_file_executable()
fi
}
-GOPTION="-u 5000 -f"
+GOPTION="-u 200 -g 5000 -f"
+SOPTION="-s system::vconf_inhouse"
+POPTION="-s starter_private::vconf"
+LOPTION="-s starter::vconf"
+
+vconftool set -t string file/private/lockscreen/pkgname "org.tizen.lockscreen" $GOPTION $POPTION
+vconftool set -t string file/private/lockscreen/default_pkgname "org.tizen.lockscreen" $GOPTION $POPTION
+#vconftool set -t string db/setting/menuscreen/package_name "org.tizen.homescreen" -u 200 -g 200 $SOPTION
+
+vconftool set -t int memory/idle_lock/state 0 -i $GOPTION $LOPTION
+vconftool set -t bool memory/lockscreen/phone_lock_verification 0 -i $GOPTION $SOPTION
+
+vconftool set -t int memory/idle-screen/safemode 0 -i $GOPTION $SOPTION
-vconftool set -t int "memory/starter/sequence" 1 -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 int memory/starter/sequence 1 -i $GOPTION $SOPTION
+vconftool set -t int memory/starter/use_volume_key 0 -i $GOPTION $SOPTION
+vconftool set -t int db/starter/is_fallback 0 -i $GOPTION $SOPTION
+vconftool set -t string db/starter/fallback_pkg "org.tizen.homescreen" $GOPTION $SOPTION
-vconftool set -t bool db/lockscreen/event_notification_display 1 $GOPTION
-vconftool set -t bool db/lockscreen/clock_display 1 $GOPTION
-vconftool set -t bool db/lockscreen/help_text_display 0 $GOPTION
+vconftool set -t int memory/lockscreen/security_auto_lock 1 -i $GOPTION $SOPTION
-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
+vconftool set -t int file/private/lockscreen/bt_out -70 $GOPTION $POPTION
+vconftool set -t int file/private/lockscreen/bt_in -60 $GOPTION $POPTION
-ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter
-ln -sf /etc/init.d/rd3starter /etc/rc.d/rc3.d/S43starter
-%postun -p /sbin/ldconfig
+mkdir -p %{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/
+ln -s %{_libdir}/systemd/system/wait-lock.service %{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/
-%files -f ug-lockscreen-options.lang
-%manifest %{name}.manifest
+#ln -sf /etc/init.d/rd4starter /etc/rc.d/rc4.d/S81starter
+#ln -sf /etc/init.d/rd4starter /etc/rc.d/rc3.d/S81starter
+
+sync
+
+%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
+%{_libdir}/systemd/system/starter.service
+%{_libdir}/systemd/system/multi-user.target.wants/starter.service
+%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/starter.service
+%{_libdir}/systemd/system/starter-pre.service
+%{_sysconfdir}/systemd/default-extra-dependencies/ignore-units.d/starter-pre.service
+%{_libdir}/systemd/system/wait-lock.service
+%{_libdir}/systemd/system/tizen-system.target.wants/wait-lock.service
+/usr/share/license/%{name}
+/opt/data/home-daemon
+/usr/share/locale/*/LC_MESSAGES/*
+/etc/smack/accesses.d/starter.efl
+
%{_userdir}/starter.service
%{_userdir}/starter.path
%{_wantsdir}/starter.path
-/usr/share/license/%{name}
-/opt/data/home-daemon
+
+%if "%{?profile}" == "mobile"
+/usr/share/starter/res/edje/*
+%endif
--- /dev/null
+[Unit]
+Description=wait lockscreen
+After=tizen-boot.target boot-animation.service
+Requires=tizen-boot.target
+Before=tizen-system.target
+ConditionPathExists=|/tmp/.passwordlock
+
+[Service]
+Type=oneshot
+ExecStart=/bin/sh -c 'while [ -e /tmp/.passwordlock ]; do sleep 0.5 ; done'
+TimeoutSec=7s
+
+[Install]
+WantedBy=tizen-system.target
--- /dev/null
+# for i18n
+
+SET(POFILES az.po bg.po ca.po cs.po da.po de.po el_GR.po en.po en_US.po es_ES.po et.po eu.po fi.po fr_CA.po fr.po gl.po hr.po hu.po hy.po is.po it_IT.po ka.po kk.po ko_KR.po lt.po lv.po mn_MN.po nb.po 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)
+
+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 ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "%s-ə başlamaq mümkün deyildir."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Xəbərdarlıq"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PIN daxil et."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Mesaja baxmaq üçün PIN daxil et"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Zəng jurnalına baxmaq üçün PIN daxil et"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "%d saniyə yenidən cəhd et."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Yanlış PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 cəhd qalmışdır."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d cəhd qalıb."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Siz %1$d dəfə cihazın kilidini səhv açmağa cəhd etmisiniz. Sizin cihazın defolt parametrlərinə bərpa edilməsi və bütün məlumatların silinməsi üçün %2$d cəhdiniz qalır."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Siz cihazı kiliddən açmaq üçün %1$d dəfə uğursuz cəhd etmisiniz. %2$d saniyə ərzində yenidən cəhd edin."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Ekr kilid açmaq müm olm"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Kodu daxil et."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d - %2$d rəqəm və ya hərf tələb olunur."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Yanlış şifrə."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Siz %d dəfə cihazın kilidini səhv açmağa cəhd etmisiniz. Bu, zavod parametrlərinə bərpa edəcək və bütün məlumatlar silinəcək"
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Ləğv et"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Təcili zəng"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Не може да се стартира %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Предупреждение"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Въведете PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Въведете PIN за преглед на съобщението"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Въведете PIN за преглед на дневника на повикванията"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Опитайте пак след %d сек."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Неправилен PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 оставащ опит."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Остават %d опита."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Опитахте да отключите устройството неуспешно %1$d пъти. Остават ви още %2$d опита, преди устройството да се рестартира до фабричните настройки по подразбиране и всички данни да бъдат изтрити."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Направили сте %1$d неуспешни опита да отключите устройството си. Опитайте отново след %2$d секунди."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Екранът не може да се отключи"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Въвеждане на парола"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Задължителни са %1$d до %2$d цифри или букви."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Грешна парола."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Опитахте да отключите устройството неуспешно %d пъти. Сега то ще се рестартира до фабричните настройки по подразбиране и всички данни ще бъдат изтрити."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Отказ"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Спешно повикване"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "No es pot iniciar %s"
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Advertiment"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Introdueixi PIN"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Introdueixi el PIN per veure el missatge"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Introdueixi el PIN per veure el registre de trucades"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Torni a intentar en %d s"
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN incorrecte"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Queda 1 intent"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Queden %d intents"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Ha intentat desbloquejar el dispositiu de forma incorrecta %1$d cops. Li queden %2$d intents abans que el dispositiu es restableixi als valors predeterminats de fàbrica i s'esborrin totes les dades."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Ha intentat desbloquejar el dispositiu de manera incorrecta %1$d cops. Torni-ho a intentar en %2$d segons."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "No es pot desbloq. la pantalla"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Introduir contrasenya"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Calen de %1$d a %2$d dígits o lletres"
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Contrasenya incorrecta"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Ha intentat desbloquejar el dispositiu de forma incorrecta %d cops. Ara es restablirà als valors predeterminats de fàbrica i s'esborraran totes les dades."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Acceptar"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Trucada d'emergència"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Nelze spustit %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Upozornění"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Zadat PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Zadejte PIN kód pro zobrazení zprávy"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Zadejte PIN kód pro zobrazení protokolu hovorů"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Opakujte akci za %d s."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Chybný PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Zbývá 1 pokus."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Počet zbývajících pokusů: %d."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "%1$dkrát jste se chybně pokusili odemknout zařízení. Po %2$d dalších neúspěšných pokusech se obnoví výchozí nastavení zařízení a všechna data budou vymazána."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "%1$dkrát jste se neúspěšně pokusili odemknout zařízení. Opakujte akci za %2$d sekund."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Displej nelze odemknout"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Zadejte heslo."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Musí obsahovat %1$d až %2$d číslic nebo písmen."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Nesprávné heslo."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "%dkrát jste se chybně pokusili odemknout zařízení. Nyní se obnoví výchozí nastavení a všechna data budou vymazána."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Storno"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Tísňové volání"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Kunne ikke starte %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Advarsel"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Angiv PIN-kode."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Angiv PIN-kode for at se besked"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Angiv PIN-kode for at se opkaldslog"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Prøv igen om %d sekunder."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Forkert PIN-kode."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 forsøg tilbage."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d forsøg tilbage."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Du har brugt %1$d forkerte forsøg på at oplåse enheden. Du har %2$d forsøg tilbage, før enheden nulstilles til fabriksstandarderne, og alle data slettes."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Du har foretaget %1$d mislykkede forsøg på at låse din enhed op. Prøv igen om %2$d sekunder."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Kan ikke låse skærmen op"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Angiv adgangskode."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d til %2$d cifre eller bogstaver krævet."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Forkert adgangskode."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Du har forgæves forsøgt at låse enheden op %d gange. Den nulstilles nu til fabriksstandarderne, og alle data slettes."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annullér"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Nødopkald"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "%s kann nicht gestartet werden"
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Warnung"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PIN eingeben"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Geben Sie die PIN ein, um die Nachricht anzuzeigen."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Geben Sie die PIN ein, um das Anrufprotokoll anzuzeigen."
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "In %d s erneut versuchen."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Falsche PIN"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Noch 1 Versuch"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d Versuche übrig"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Sie haben %1$d Mal fehlerhaft versucht, das Gerät zu entsperren. Sie haben noch %2$d Versuche. Danach wird das Gerät auf die Werkseinstellungen zurückgesetzt, und alle Daten werden gelöscht."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Sie haben %1$d Mal vergeblich versucht, das Gerät zu entsperren. Versuchen Sie es in %2$d Sekunden erneut."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Entsperren nicht moglich"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Passwort eingeben"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Es sind %1$d bis %2$d Ziffern oder Buchstaben erforderlich."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Falsches Passwort"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Sie haben %d Mal vergeblich versucht, das Gerät zu entsperren. Das Gerät wird jetzt auf die Werkseinstellungen zurückgesetzt und alle Daten gelöscht."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Abbruch"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Notruf"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Αδύνατη η εκκίνηση του %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Προειδοποίηση"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Εισαγωγή PIN κλειδώματος."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Καταχώριση PIN για προβολή του μηνύματος"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Καταχώριση PIN για προβολή του αρχείου κλήσεων"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Δοκιμ. ξανά σε %d δευτ."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Λανθασμένο PIN κλειδώματος"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Απομένει 1 προσπάθεια."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d προσπάθειες απομένουν."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Έχετε επιχειρήσει να ξεκλειδώσετε τη συσκευή %1$d φορές εσφαλμένα. Έχουν απομείνει %2$d προσπάθειες μέχρι την επαναφορά των εργοστασιακών ρυθμίσεων και τη διαγραφή όλων των δεδομένων της συσκευής"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Προσπαθήσατε %1$d φορές να ξεκλειδώσετε τη συσκευή σας χωρίς επιτυχία. Δοκιμάστε ξανά σε %2$d δευτερόλεπτα."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Ξεκλείδωμα οθόνης μη δυνατό"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Εισαγωγή κωδικού."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Απαιτούνται από %1$d έως %2$d ψηφία ή γράμματα."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Λάθος κωδικός."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Έχετε επιχειρήσει να ξεκλειδώσετε τη συσκευή %d φορές εσφαλμένα. Θα γίνει επαναφορά των εργοστασιακών ρυθμίσεων όλα τα δεδομένα θα διαγραφούν."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Ακύρωση"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Κλήση έκτακτης ανάγκης"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Unable to launch %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Warning"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Enter PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Enter PIN to view message"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Enter PIN to view call log"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Try again in %d seconds."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Incorrect PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 attempt left."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d attempts left."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "You have attempted to unlock the device incorrectly %1$d times. You have %2$d attempts left before the device is reset to factory defaults and all data is erased."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "You have made %1$d unsuccessful attempts to unlock your device. Try again in %2$d seconds."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Unable to unlock screen"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Enter password."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d to %2$d digits or letters required."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Incorrect password."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "You have attempted to unlock the device incorrectly %d times. It will now be reset to factory defaults and all data will be erased."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Emergency call"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Unable to launch %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Warning"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Enter PIN"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Enter PIN to view message"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Enter PIN to view call log"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Try again in %d seconds."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Incorrect PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 attempt left."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d attempts left."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "You have attempted to unlock the device incorrectly %1$d times. You have %2$d attempts left before the device is reset to factory defaults and all data is erased."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "You have made %1$d unsuccessful attempts to unlock your device. Try again in %2$d seconds."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Unable to unlock screen"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Enter password"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d to %2$d digits or letters required."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Incorrect password."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "You have attempted to unlock the device incorrectly %d times. It will now be reset to factory defaults and all data will be erased."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Emergency call"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "No se puede iniciar %s"
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Aviso"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Introducir PIN"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Introduzca el PIN para ver el mensaje"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Introduzca el PIN para ver el registro de llamadas"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Int. de nuevo en %d seg"
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN incorrecto"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Último intento"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Quedan %d intentos."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Ha intentado desbloquear el dispositivo de forma incorrecta %1$d veces. Le quedan %2$d intentos antes de que el dispositivo se restablezca a los valores predeterminados de fábrica y se eliminen todos los datos."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Ha intentado desbloquear su dispositivo %1$d veces sin éxito. Vuelva a intentarlo dentro de %2$d segundos."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "No se puede desbloq pantalla"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Introducir contraseña"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Se requieren de %1$d a %2$d dígitos o letras"
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Contraseña incorrecta"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Ha intentado desbloquear el dispositivo de forma incorrecta %d veces. Ahora se restablecerá a los valores predeterminados de fábrica y se eliminarán todos los datos."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Llamada de emergencia"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "No es posible iniciar %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Aviso"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Introducir PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Introducir PIN para ver mensaje"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Introducir PIN para ver registro de llamadas"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Intentar de nuevo en %d seg."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN incorrecto."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Último intento."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Quedan %d intentos."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Intentó desbloquear el dispositivo incorrectamente %1$d veces. Le quedan %2$d intentos antes de que el dispositivo se restablezca a sus valores predeterminados de fábrica y se eliminen todos los datos."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Ha intentado desbloquear su dispositivo %1$d veces sin éxito. Vuelva a intentarlo dentro de %2$d segundos."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "No es posible desbloquear"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Introducir contraseña."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Se requieren de %1$d a %2$d dígitos o letras."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Contraseña incorrecta."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Intentó desbloquear el dispositivo incorrectamente %d veces. Ahora se restablecerá a sus valores predeterminados de fábrica y se eliminarán todos los datos."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Aceptar"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Llamada de emergencia"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Üksust %s ei saa käivitada."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Hoiatus"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Sisestage PIN-kood."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Sisestage sõnumi kuvamiseks PIN-kood"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Sisestage kõnelogi kuvamiseks PIN-kood"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Proovige %d sek parast."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Vale PIN-kood."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 katse on jäänud."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d katset jäänud."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Te olete proovinud seadet valesti lukust avada %1$d korda. %2$d katset on jäänud enne, kui seade lähtestatakse tehase vaikeseadetele ja kõik andmed kustutatakse."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Olete teinud seadme avamisel %1$d ebaõnnestunud katset. Proovige %2$d sekundi pärast uuesti."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Ekraani ei saa avada"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Sisestage parool."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Nõutud on %1$d kuni %2$d numbrit või tähte."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Vale parool."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Te olete proovinud seadet valesti lukust avada %d korda. Nüüd lähtestatakse see tehase vaikeseadetele ning kõik andmed kustutatakse."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Tühista"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Hädaabikõne"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Ezin da %s abiatu"
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Oharra"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PINa idatzi"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Idatzi PINa mezua ikusteko"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Idatzi PINa dei erregistroa ikusteko"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Saiatu berriz %d segundoren ondoren"
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN okerra"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Ahalegin 1 gelditzen zaizu"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d saiakera geratzen dira"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Gailua modu desegokian desblokeatzen saiatu zara %1$d aldiz. %2$d saio geratzen zaizkizu gailuan fabrikako hobespenak berrezarri eta datu guztiak ezabatu aurretik."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Gailua desblokeatzeko %1$d saio oker egin dituzu. Saiatu berriz %2$d segundo barru."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Ezin izan da pantaila desblokeatu"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Pasahitza idatzi"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d eta %2$d digitu edo letra artean behar dira"
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Pasahitz okerra"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Gailua modu desegokian desblokeatzen saiatu zara %d aldiz. Orain, fabrikako hobespenak berrezarri eta datu guztiak ezabatuko dira."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Ados"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Ezeztatu"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Emergentzia deia"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Sovellusta %s ei voi käynnistää."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Varoitus"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Anna PIN-koodi."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Anna PIN-koodi viestin tarkastelua varten"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Anna PIN-koodi puhelulokin tarkastelua varten"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Yritä %d s kul. uudelleen."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Virheellinen PIN-koodi."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 yritys jäljellä"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d yritystä jäljellä"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Olet yrittänyt poistaa laitteen lukituksen virheellisesti %1$d kertaa. Sinulla on %2$d yrityskertaa jäljellä, ennen kuin laitteen tehdasasetukset palautetaan ja kaikki tiedot poistetaan."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Laitteen lukituksen poistaminen epäonnistui %1$d kertaa. Yritä %2$d sekunnin kuluttua uudelleen."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Näytön lukit. ei voi poistaa"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Kirjoita salasana."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Oltava %1$d–%2$d numeroa tai kirjainta."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Virheellinen salasana"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Olet yrittänyt poistaa laitteen lukituksen virheellisesti %d kertaa. Laitteen tehdasasetukset palautetaan ja kaikki tiedot poistetaan."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Peruuta"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Hätäpuhelu"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Impossible de lancer %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Avertissement"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Saisir le code PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Saisir le code PIN pour afficher le message"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Saisir le code PIN pour afficher le journal d'appels"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Réessayez dans %d secondes."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Code PIN incorrect"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 essai restant"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d essais restants"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %1$d reprises. Il reste %2$d tentatives avant le rétablissement des paramètres d'origine et la suppression de toutes les données."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Le déverrouillage de votre appareil a échoué à %1$d reprises. Réessayez dans %2$d secondes."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Impossible déverrouiller écran"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Saisir le mot de passe."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d à %2$d chiffres ou lettres requis"
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Mot de passe incorrect"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %d reprises. Les paramètres d'origine vont maintenant être rétablis et toutes les données effacées."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Appel d'urgence"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Impossible de lancer %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Avertissement"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Saisir le NIP."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Saisir le code NIP pour afficher le message"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Saisir le code NIP pour afficher le journal d'appels"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Réessayez ds %d secondes."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "NIP incorrect"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 essai restant."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d essais restants."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %1$d reprises. Il reste %2$d tentatives avant le rétablissement des paramètres d'origine et la suppression de toutes les données."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Le déverrouillage de votre appareil a échoué à %1$d reprises. Réessayez dans %2$d secondes."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Impossible déverrouiller écran"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Saisir le mot de passe."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d à %2$d chiffres ou lettres requis."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Mot de passe incorrect."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Vous avez essayé de déverrouiller l'appareil de façon incorrecte à %d reprises. Les paramètres d'origine vont maintenant être rétablis et toutes les données effacées."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Appel d'urgence"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Non se pode iniciar %s"
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Aviso"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Introducir PIN"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Introduce o PIN para ver a mensaxe"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Introduce o PIN para ver o rexistro de chamadas"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Ténteo de novo en %d seg."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN incorrecto"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Queda 1 intento"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Quedan %d intentos"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Tentaches desbloquear o dispositivo incorrectamente %1$d veces. Quédanche %2$d intentos antes de que se restablezan os axustes predeterminados de fábrica e se eliminen todos os datos do dispositivo."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Realizaches %1$d intentos sen éxito de desbloquear o dispositivo. Téntao de novo dentro de %2$d segundos."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Imposible desbloquear pantalla"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Introduza o contrasinal"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Precísanse entre %1$d e %2$d díxitos ou letras"
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Contrasinal non válido"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Tentaches desbloquear o dispositivo incorrectamente %d veces. Agora restableceranse os axustes predeterminados de fábrica e borraranse todos os datos."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Aceptar"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Chamada de urxencia"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Nemoguće pokrenuti %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Upozorenje"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Unesite PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Unesite PIN za prikaz poruke"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Unesite PIN za prikaz popisa poziva"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Ponovite nakon %d sek."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Neispravan PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Još 1 pokušaj."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d pokušaja preostalo."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Pokušali ste neispravno otključati uređaj %1$d puta. Imate još %2$d pokušaja prije nego što se uređaj vrati na tvornički zadane postavke te se svi podaci izbrišu."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Neuspješno ste pokušali otključati uređaj %1$d puta. Pokušajte ponovno za %2$d sekundi."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Nije moguće otključati zaslon"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Unesite lozinku."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Potrebno je %1$d do %2$d znamenki ili slova."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Neispravna lozinka."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Pokušali ste neispravno otključati uređaj %d puta. Vratit će se na tvornički zadane postavke i svi će podaci biti izbrisani."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Prekid"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "SOS poziv"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "A(z) %s nem indítható el."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Figyelmeztetés"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Írja be a PIN-kódot!"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Adja meg a PIN-t az üzenet megjelenítéséhez"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Adja meg a PIN-t a hívásnapló megjelenítéséhez"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Prób. újra %d mp múlva."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Hibás PIN-kód"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Még 1 próbálkozásra van."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d kísérlet maradt."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "%1$d alkalommal helytelenül kísérelte meg az eszköz feloldását. További %2$d sikertelen kísérlet esetén visszaállnak az eszköz gyári alapértelmezései, és minden adat törlődik róla."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "%1$d alkalommal sikertelenül próbálta feloldani az eszközt. Próbálja újra %2$d másodperc múlva."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Nem oldható fel a képernyő"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Írja be a jelszót."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d–%2$d számjegy vagy betű szükséges."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Téves jelszó"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "%d alkalommal helytelenül kísérelte meg az eszköz feloldását. Most visszaállnak az eszköz gyári alapértelmezései, és minden adat törlődik róla."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Mégse"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Segélyhívás"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Հնարավոր չէ գործարկել %s-ը:"
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Զգուշացում"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Մուտքագրեք PIN-ը:"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Մուտքագրեք PIN՝ հաղորդագրությունը դիտելու համար"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Մուտքագրեք PIN՝ կանչերի մատյանը դիտելու համար"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Նորից փորձեք %d վրկ.-ից:"
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Սխալ PIN:"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 փորձ է մնացել:"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Մնացել է %d փորձ:"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Դուք սարքի արգելաբացման սխալ փորձ եք արել %1$d անգամ: Ձեզ %2$d փորձ է մնացել, նախքան սարքը կհետադարձվի գործարանային կանխադրվածքի, և բոլոր տվյալները կջնջվեն:"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Դուք կատարել եք Ձեր սարքն արգելաբացելու %1$d անհաջող փորձ: Նորից փորձեք %2$d վայրկյանից:"
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Անհնար է արգելաբացել էկրանը"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Մուտքագրեք գաղտնաբառը:"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Պահանջվում է %1$d-ից %2$d թվանշան կամ տառ:"
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Սխալ գաղտնաբառ:"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Դուք սարքի արգելաբացման սխալ փորձ եք արել %d անգամ: Այն հիմա կհետադարձվի գործարանային կանխադրվածքի, և բոլոր տվյալները կջնջվեն"
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Չեղարկել"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Հրատապ զանգ"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Mistókst að opna %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Viðvörun"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Sláðu inn PIN-númeri."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Sláðu inn PIN-númer til að skoða skilaboð"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Sláðu inn PIN-númer til að skoða símtalaskrá"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Reyndu aftur eftir %d sek."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Rangt PIN-númer."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 tilraun eftir."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d tilraunir eftir."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Þú hefur reynt að opna tækið á rangan hátt %1$d sinnum. Þú átt %2$d tilraunir eftir áður en tækið verður núllstillt og öllum gögnum þess eytt."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Þú hefur gert %1$d misheppnaðar tilraunir til að opna tækið. Reyndu aftur eftir %2$d sekúndur."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Ekki er hægt að opna skjá"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Rita aðgangsorð."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Slá þarf inn %1$d til %2$d stafi."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Rangt aðgangsorð."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Þú hefur reynt að opna tækið á rangan hátt %d sinnum. Það verður nú endurstillt á grunnstillingar framleiðanda og öllum gögnum verður eytt."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Í lagi"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Hætta v."
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Neyðarhringing"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Impossibile avviare %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Avviso"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Inserisci PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Inserite il PIN per visualizzare il messaggio"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Inserite il PIN per visualizzare il registro chiamate"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Riprovate tra %d secondi."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN errato."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 tentativo rimasto."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d tentativi rimasti."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Avete tentato per %1$d volte di sbloccare il dispositivo in modo errato. Sono rimasti %2$d tentativi prima che il dispositivo venga ripristinato ai valori predefiniti di fabbrica e che tutti i dati vengano eliminati."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Avete effettuato %1$d tentativi errati per sbloccare il dispositivo. Riprovate tra %2$d secondi."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Impossibile sbloccare schermo"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Inserisci password."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Sono necessarie da %1$d a %2$d cifre o lettere."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Password errata."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "%d tentativi errati di sblocco del dispositivo. Il dispositivo verrà ripristinato ai valori predefiniti di fabbrica e i dati verranno eliminati."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annulla"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Chiamata di emergenza"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "ვერ გაიხსნება %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "გაფრთხილება"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "შეიყვანეთ PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "შეიყვანეთ PIN, რომ ნახოთ შეტყობინება"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "შეიყვანეთ PIN, რომ ნახოთ ზარების ჟურნალი"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "კიდევ ცადეთ %d წამში."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "არასწორი PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "დარჩა 1 ცდა."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d ცდა დარჩა."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "თქვენ აპარატის განბლოკვის %1$d არასწორი მცდელობა გქონდათ. თქვენ დაგრჩათ %2$d მცდელობა, სანამ დაბრუნდება აპარატის საწყისი ქარხნული პარამეტრები და წაიშლება ყველა მონაცემი."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "თქვენ გქონდათ აპარატის განბლოკვის %1$d წარუმატებელი მცდელობა. ისევ სცადეთ %2$d წამში."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "ეკრანის განბლოკვა შეუძლებელია"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "პაროლის შეყვანა."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "უნდა იყოს %1$d-%2$d ციფრი ან ასო."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "პაროლი არასწორია."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "თქვენ აპარატის განბლოკვის %d არასწორი მცდელობა გქონდათ. ახლა დაბრუნდება საწყისი ქარხნული პარამეტრები და წაიშლება ყველა მონაცემი"
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "გაუქმება"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "საგანგებო ზარი"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "%s іске қосу мүмкін емес."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Ескерту"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PIN енгізу."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Хабарды көру үшін, PIN кодын енгізу"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Қоңыраулар журналын көру үшін, PIN кодын енгізу"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "%d сек кейін қайталаңыз."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Қате PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 әрекет қалды."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d әрекеттену аяқталды."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Құрылғының құлпын ашуда %1$d рет қателестіңіз. Құрылғының зауыттық параметрлері қалпына келтіріліп, барлық деректердің өшірілуінен бұрын %2$d талпынысыңыз қалды."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Құрылғы құлпын ашу үшін, %1$d рет сәтсіз әрекет жасалды. Әрекетті %2$d секундтан кейін қайталаңыз."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Экран құлпын ашу мүмкін емес"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Кілтсөз енгізіңіз."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d-%2$d сан немесе әріп талап етіледі."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Қате кілтсөз."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "%d рет дұрыс емес құрылғының құлпын ашу әрекетін жасадыңыз. Зауыттық әдепкі параметрлер қалпына келтіріліп, бүкіл деректер өшіріледі"
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Тоқтату"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Шұғыл қоңырау шалу"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "%s을(를) 실행할 수 없습니다."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "경고"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PIN을 입력하세요."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "메시지를 보려면 PIN을 입력하세요"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "통화기록을 보려면 PIN을 입력하세요"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "%d초 후에 다시 시도하세요."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "잘못된 PIN을 입력하였습니다."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "입력 기회가 1회 남았습니다."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "입력 기회가 %d회 남았습니다."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "잠금해제 비밀번호를 %1$d회 잘못 입력하였습니다. 디바이스 설정 및 데이터가 기본 설정으로 초기화되기까지 비밀번호를 %2$d회 입력할 수 있습니다."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "잠금해제를 %1$d회 잘못 입력하였습니다. %2$d초 후에 다시 시도하세요."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "화면 잠금을 해제할 수 없음"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "비밀번호를 입력하세요."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d-%2$d자의 숫자 또는 문자를 입력하세요."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "잘못된 비밀번호를 입력하였습니다."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "잠금해제 비밀번호를 %d회 잘못 입력하였습니다. 디바이스 설정을 기본 설정으로 초기화하고 모든 데이터를 삭제합니다."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "확인"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "취소"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "긴급전화"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Negalima paleisti %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Perspėjimas"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Įvesti PIN kodą."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Įveskite PIN žinutės peržiūrai"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Įveskite PIN skambučių žurnalo peržiūrai"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Bandykite dar po %d sek."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Netinkamas PIN kodas."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Liko 1 bandymas."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d likę bandymai."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Neteisingai bandėte atrakinti įrenginį %1$d kartus (-ų). Prieš grąžinant įrenginio gamyklinius numatytuosius nustatymus ir ištrinant visus duomenis, turėsite %2$d bandymus (-ų)."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Jūs %1$d k. nesėkmingai bandėte atrakinti įrenginį. Bandykite dar kartą po %2$d sek."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Neįmanoma atrakinti ekrano"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Įvesti slaptažodį."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Reikia nurodyti %1$d–%2$d skaitmenis (-ų) ar raides (-ių)."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Neteisingas slaptažodis."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Neteisingai bandėte atrakinti įrenginį %d kartus (-ų). Dabar bus iš naujo nustatyti gamykliniai numatytieji nustatymai ir ištrinti visi duomenys."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Gerai"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Atšaukti"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Pagalbos skambučiai"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Nevar palaist %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Brīdinājums"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Ievadiet PIN kodu."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Ievadiet PIN kodu, lai skatītu ziņu"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Ievadiet PIN kodu, lai skatītu zvanu žurnālu"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Mēģiniet vēlr.pēc %d sek."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Nepareizs PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Atlicis 1 mēģinājums."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Atlikuši %d mēģinājumi."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Jūs %1$d reizes nepareizi mēģinājāt atbloķēt ierīci. Jums ir atlikuši %2$d mēģinājumi, pirms ierīcē tiks atjaunoti rūpnīcas noklusējuma iestatījumi un visi dati tiks izdzēsti."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Jūs esat veicis %1$d neveiksmīgus ierīces atbloķēšanas mēģinājumus. Mēģiniet vēlreiz pēc %2$d sekundēm."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Nevar atbloķēt ekrānu"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Ievadiet paroli."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Nepieciešams ievadīt no %1$d līdz %2$d cipariem vai burtiem."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Nepareiza parole."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Jūs %d reizes neveiksmīgi mēģinājāt atbloķēt ierīci. Tagad tajā tiks atjaunoti rūpnīcas iestatījumi un visi dati tiks izdzēsti."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Labi"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Atcelt"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Ārkārtas zvans"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Unable to launch %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Анхааруулга"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PIN код оруулах"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "PIN оруулж зурвас үз"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "PIN оруулж дуудлагын бүртгэл үз"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "%d сек дараа дахин оролд"
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Буруу PIN код"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 оролдлого үлдсэн."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d оролдлого үлдсэн."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Та төхөөрөмжийг нээх гэж %1$d удаа буруу оролдсон. Төхөөрөмж үйлдвэрийн өгөгдмөл тохиргоо руугаа буцан орж, бүх өгөгдөл арилах хүртэл %2$d удаа оролдох боломж үлдсэн."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Та төхөөрөмжөө нээх гэж %1$d удаа амжилтгүй оролдсон. %2$d секундын дараа дахин оролд."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Дэлгэц нээх боломжгүй"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Нууц үг оруулах"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d to %2$d digits or letters required."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Буруу нууц үг"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Та төхөөрөмжийг нээх гэж %d удаа буруу оролдсон. Энэ одоо үйлдвэрийн өгөгдмөл тохиргоо руугаа буцаж орох бөгөөд бүх өгөгдөл арилна"
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Цуцлах"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Яаралтай тусламжийн дуудлага"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Kan ikke starte %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Advarsel"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Angi PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Angi PIN-kode for å vise melding"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Angi PIN-kode for å vise samtalelogg"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Prøv på nytt om %d sek."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Ugyldig PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 forsøk gjenstår."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d forsøk igjen."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Du har prøvd å låse opp enheten på feil måte %1$d ganger. Du har %2$d forsøk igjen før enheten tilbakestilles til fabrikkstandarder og alle data slettes."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Du har gjort %1$d feil forsøk på å låse opp enheten. Prøv på nytt om %2$d sekunder."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Kan ikke låse opp skjermen"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Angi passord."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d til %2$d sifre eller bokstaver nødvendige."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Feil passord."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Du har prøvd å låse opp enheten på feil måte %d ganger. Den vil nå bli tilbakestilt til fabrikkstandardene og alle data vil bli slettet."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Nødanrop"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Kan %s niet starten."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Waarschuwing"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PIN invoeren"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Pincode invoeren voor weergave bericht"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Pincode invoeren voor weergave oproepenlijst"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Probeer opn. over %d sec."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Onjuiste PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 poging over."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d pogingen over."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "U hebt %1$d keer een onjuiste poging gedaan om het apparaat te ontgrendelen. U hebt nog %2$d pogingen over voordat het apparaat wordt teruggezet op de fabrieksinstellingen en alle gegevens worden gewist."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "U hebt %1$d mislukte pogingen gedaan om uw apparaat te ontgrendelen. Probeer het opnieuw over %2$d seconden."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Kan scherm niet ontgrendelen"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Wachtwoord invoeren"
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d tot %2$d cijfers of letters vereist."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Onjuist wachtwoord."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "U hebt %d keer een onjuiste poging gedaan om het apparaat te ontgrendelen. Het wordt nu teruggezet op de fabrieksinstellingen en alle gegevens worden gewist."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annuleer"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Noodoproep"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Nie można uruchomić %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Ostrzeżenie"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Wpisz PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Podaj kod PIN, aby wyświetlić wiadomość"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Podaj kod PIN, aby wyświetlić spis połączeń"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Ponów próbę za %d sek."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Nieprawidłowy PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Pozostała 1 próba."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Pozostało prób: %d."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Nieprawidłowych prób odblokowania urządzenia: %1$d. Pozostałych prób przed wyzerowaniem urządzenia do domyślnych ustawień fabrycznych i usunięciem wszystkich danych: %2$d."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Liczba nieudanych prób odblokowania urządzenia: %1$d. Spróbuj ponownie za %2$d s."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Nie można odblokować ekranu"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Wpisz hasło."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Wymaganych jest co najmniej cyfr lub liter: %1$d do %2$d."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Błędne hasło."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Podjęto nieprawidłową próbę odblokowania urządzenia %d razy. W urządzeniu zostaną przywrócone domyślne ustawienia fabryczne oraz zostaną z niego usunięte wszystkie dane."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Anuluj"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Połączenie alarmowe"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Impossível iniciar %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Aviso"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Insira o PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Insira o PIN para visualizar a mensagem"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Insira o PIN para visualizar o registro de chamadas"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Tente nov. dentro %d seg."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN incorreto."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Resta 1 tentativa."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Restam %d tentativas."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Você tentou desbloquear o dispositivo incorretamente %1$d vezes. Você tem %2$d tentativas restantes antes do dispositivo ser redefinido para os padrões de fábrica e todos os dados serem apagados."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Você fez %1$d tentativas sem sucesso para desbloquear seu dispositivo. Tente novamente em %2$d segundos."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Impossível desbloquear a tela"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Insira senha."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "São necessários de %1$d a %2$d dígitos ou letras."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Senha incorreta."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Você tentou desbloquear o dispositivo incorretamente %d vezes. Ele será redefinido agora para os padrões de fábrica e todos os dados serão apagados."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Chamada de emergência"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Impossível iniciar %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Aviso"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Introduzir PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Introduza PIN para ver mensagem"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Introduza PIN para ver registo de chamadas"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Tente nov. dentro %d seg."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN incorrecto."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Resta 1 tentativa."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d tentativas restantes."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Tentou desbloquear o dispositivo incorrectamente %1$d vezes. Tem %2$d tentativas até serem repostos no dispositivo os valores de fábrica e todos os dados serem apagados."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Fez %1$d tentativas mal sucedidas de desbloquear o seu dispositivo. Tente de novo daqui a %2$d segundos."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Impossível desbloquear ecrã"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Introduzir palavra-passe."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "São necessários %1$d a %2$d dígitos ou letras."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Palavra-passe incorrecta."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Tentou desbloquear o dispositivo incorrectamente %d vezes. Este vai ser reposto para as predefinições de fábrica e todos os dados serão apagados."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Chamada de emergência"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Imposibil de lansat %s"
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Avertisment"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Introduceţi PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Introduceţi codul PIN pentru a vizualiza mesajul"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Introduceţi codul PIN pentru a vizualiza jurnalul de apeluri"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Reîncercaţi peste %d sec."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN incorect"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 încercare rămasă"
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d încercări rămase"
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Aţi încercat să deblocaţi incorect dispozitivul de %1$d ori. Mai aveţi %2$d încercări înainte ca dispozitivul să fie resetat la valorile implicite din fabrică şi înainte ca toate datele să fie şterse."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Aţi avut %1$d încercări nereuşite de a debloca dispozitivul. Reîncercaţi peste %2$d secunde."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Ecranul nu se poate debloca"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Introduceţi parola."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Sunt necesare între %1$d şi %2$d cifre sau litere."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Parolă incorectă"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Aţi încercat să deblocaţi incorect dispozitivul de %d ori. Acesta va fi resetat acum la valorile implicite din fabrică şi toate datele vor fi şterse."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Anulare"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Apel de urgenţă"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Невозможно запустить %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Предупреждение"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Введите PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Введите PIN-код, чтобы просмотреть сообщение"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Введите PIN-код, чтобы просмотреть журнал вызовов"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Повторите через %d сек."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Неверный PIN"
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Осталась 1 попытка."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Осталось попыток: %d."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Число неудачных попыток разблокировки устройства: %1$d. Осталось попыток: %2$d, после чего настройки будут сброшены до заводских значений, а все данные — удалены."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Число неудачных попыток разблокировки устройства: %1$d. Повторите попытку через %2$d сек."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Невозможно разблокир-ть экран"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Введите пароль."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Требуется от %1$d до %2$d цифр или букв."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Неправильный пароль"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Число неудачных попыток разблокировки устройства: %d. Настройки будут сброшены до заводских значений, а все данные — удалены"
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "ОК"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Отмена"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Экстренный вызов"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Nedá sa spustiť %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Varovanie"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Zadať PIN"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Zadajte kód PIN na zobrazenie správy"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Zadajte kód PIN na zobrazenie denníka hovorov"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Skúste znova o %d sekúnd."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Nesprávny PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Zostáva 1 pokus."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "Počet zostávajúcich pokusov: %d."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "%1$d-krát ste sa pokúsili nesprávne odomknúť zariadenie. Zostávajú vám ešte %2$d pokusy a potom sa pre zariadenie obnovia predvolené nastavenia od výrobcu a vymažú sa všetky údaje."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Dokončili ste vykonanie %1$d neúspešných pokusov o odomknutie zariadenia. Skúste to znova po uplynutí %2$d sekúnd."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Obrazovka sa nedá odomknúť"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Zadajte heslo."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Vyžaduje sa %1$d až %2$d číslic alebo písmen."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Nesprávne heslo."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "%d-krát ste sa pokúsili nesprávne odomknúť zariadenie. Teraz sa preň obnovia predvolené nastavenia od výrobcu a vymažú sa všetky údaje."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Zrušiť"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Tiesňový hovor"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Ni mogoče zagnati %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Opozorilo"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Vnesite PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Za prikaz sporočila vnesite kodo PIN"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Za prikaz dnevnika klicev vnesite kodo PIN"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Poskusite znova čez %d s."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Napačna koda PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Preostal je še 1 poskus."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d preostalih poizkusov."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Napravo ste %1$d-krat poskusili odkleniti nepravilno. Imate še %2$d poskusov, preden bo naprava ponastavljena na privzete tovarniške nastavitve in bodo izbrisani vsi podatki."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "%1$d-krat ste neuspešno poskusili odkleniti napravo. Poskusite znova čez %2$d s."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Zaslona ni mogoče odkleniti"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Vnesite geslo."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Zahtevanih je od %1$d do %2$d znakov ali črk."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Napačno geslo."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Napravo ste %d-krat poskusili odkleniti nepravilno. Zdaj bo ponastavljena na privzete tovarniške nastavitve in vsi podatki bodo izbrisani."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "V redu"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Prekliči"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Klic v sili"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Nemoguće pokrenuti %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Upozorenje"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Unesi PIN kod."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Unesi PIN kôd da bi prikazao/la poruku"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Unesi PIN kôd da bi prikazao/la dnevnik poziva"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Probaj opet za %d sekundi."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Neispravan PIN kod."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 pokušaj preostao."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d pokušaja ostalo."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "%1$d puta si pogrešio/la u pokušaju da otključaš uređaj. Preostalo ti je %2$d pokušaja pre vraćanja uređaja na podrazumevana fabrička podešavanja i brisanja svih podataka."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "%1$d neuspešnih pokušaja otključavanja uređaja. Pokušaj ponovo za %2$d sekundi."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Nije moguće otključati ekran"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Unesi šifru."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Obavezno je između %1$d i %2$d cifara ili slova."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Pogrešna šifra"
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "%d puta si pogrešio/la u pokušaju da otključaš uređaj. Uređaj će se sada vratiti na podrazumevana fabrička podešavanja i svi podaci će biti izbrisani."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Otkaži"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Pozivi u hitnim slučajevima"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Kan inte starta %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Varning"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Ange PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Ange PIN-koden för att visa meddelandet"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Ange PIN-koden för att visa samtalsloggen"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Försök igen om %d sek."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Fel PIN-kod."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 försök kvar."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d försök kvar."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Du har försökt låsa upp enheten på fel sätt %1$d gånger. Du har %2$d försök kvar innan enheten återställs till fabriksinställningar och alla data raderas."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Du har gjort %1$d misslyckade försök att låsa upp enheten. Försök igen om %2$d sekunder."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Kan inte låsa upp skärmen"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Ange lösenord."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d till %2$d siffror eller bokstäver krävs."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Fel lösenord."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Du har försökt att låsa upp enheten felaktigt %d gånger. Enheten kommer nu att återställas till fabriksinställningarna och alla data kommer att raderas."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Nödsamtal"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "%s öğesi başlatılamıyor."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Uyarı"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "PIN'i girin."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Mesajı görüntülemek için PIN'i girin"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Arama kaydını görüntülemek için PIN'i girin"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "%d saniye içinde de tekrar deneyin."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "PIN yanlış."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "1 deneme hakkı kaldı."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d deneme kaldı."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Cihazın kilidini açmak için şifreyi %1$d kez yanlış girdiniz. Cihaz varsayılan fabrika ayarlarına sıfırlanmadan ve tüm veriler silinmeden önce %2$d deneme hakkınız kaldı."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Cihazınızın kilidini açmak için %1$d başarısız denemede bulundunuz. %2$d saniye içinde tekrar deneyin."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Ekran kilidi açılamıyor"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Şifreyi girin."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "%1$d - %2$d hane veya harf gerekli."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Şifre yanlış."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Cihazın kilidini %d defa yanlış açma girişiminde bulundunuz. Cihaz şimdi fabrika ayarlarına sıfırlanacak ve tüm veriler silinecektir."
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "Tamam"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "İptal"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Acil arama"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Неможливо запустити %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Попередження"
+
+msgid "IDS_COM_BODY_ENTER_PIN"
+msgstr "Введіть PIN."
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_MESSAGE_ABB"
+msgstr "Введіть PIN-код, щоб переглянути повідомлення"
+
+msgid "IDS_LCKSCN_NPBODY_ENTER_PIN_TO_VIEW_CALL_LOG_ABB"
+msgstr "Введіть PIN-код, щоб переглянути журнал викликів"
+
+msgid "IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"
+msgstr "Повт.спробу через %d сек."
+
+msgid "IDS_COM_BODY_INCORRECT_PIN"
+msgstr "Хибний PIN."
+
+msgid "IDS_IDLE_BODY_1_ATTEMPT_LEFT"
+msgstr "Залишилась 1 спроба."
+
+msgid "IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"
+msgstr "%d спроби залишилось."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"
+msgstr "Кількість невдалих спроб розблокування пристрою: %1$d. Залишилася %2$d спроб, перш ніж установки пристрою буде скинуто до стандартних заводських значень, а всі дані видалено."
+
+msgid "IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"
+msgstr "Здійснено %1$d невдалих спроб розблокування пристрою. Спробуйте ще раз через %2$d сек."
+
+msgid "IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"
+msgstr "Неможливо розблокувати екран"
+
+msgid "IDS_COM_BODY_ENTER_PASSWORD"
+msgstr "Введіть пароль."
+
+msgid "IDS_LCKSCN_BODY_P1SD_TO_P2SD_DIGITS_OR_LETTERS_REQUIRED"
+msgstr "Потрібно ввести від %1$d до %2$d цифр або літер."
+
+msgid "IDS_IDLE_BODY_INCORRECT_PASSWORD"
+msgstr "Хибний пароль."
+
+msgid "IDS_LCKSCN_BODY_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_PD_TIMES_IT_WILL_NOW_BE_RESET_TO_FACTORY_DEFAULTS_AND_ALL_DATA_WILL_BE_ERASED"
+msgstr "Кількість невдалих спроб розблокування пристрою: %d. Установки буде скинуто до заводських та усі дані буде стерто"
+
+msgid "IDS_COM_BUTTON_OK_ABB"
+msgstr "ОК"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Скасувати"
+
+msgid "IDS_LCKSCN_BODY_EMERGENCY_CALL"
+msgstr "Екстрений виклик"
+
--- /dev/null
+msgid "IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"
+msgstr "Unable to launch %s."
+
+msgid "IDS_COM_POP_WARNING"
+msgstr "Warning"
+
# sleep 0.1
#done
-while [ ! -f /tmp/amd_ready ];
+while [ ! -f /run/.wm_ready];
do
- sleep 0.1
+ /bin/sleep 0.1
done
vconf_set_safemode()
{
- if [ -f /opt/etc/.safemode ]
+ if [ -f /opt/etc/.safeboot ]
then
- vconftool set -t int memory/idle-screen/safemode "1" -i -f
+ /usr/bin/vconftool set -t int memory/idle-screen/safemode "1" -f
else
- vconftool set -t int memory/idle-screen/safemode "0" -i -f
+ /usr/bin/vconftool set -t int memory/idle-screen/safemode "0" -f
fi
}
vconf_set_safemode
-
-echo -e "<2>[${_G}menu-daemon start${C_}]" > /dev/kmsg
-/usr/bin/starter &
+exit 0
#!/bin/sh
vconf_set_safemode()
{
- if [ -f /opt/etc/.safemode ]
+ if [ -f /opt/etc/.safeboot ]
then
- vconftool set -t int memory/idle-screen/safemode "1" -i -f
+ /usr/bin/vconftool set -t int memory/idle-screen/safemode "1" -i -f
else
- vconftool set -t int memory/idle-screen/safemode "0" -i -f
+ /usr/bin/vconftool set -t int memory/idle-screen/safemode "0" -i -f
fi
}
vconf_set_safemode
--- /dev/null
+ADD_SUBDIRECTORY(edje)
--- /dev/null
+IF("${TIZEN_PROFILE_NAME}" STREQUAL "MOBILE")
+ADD_SUBDIRECTORY(mobile)
+ENDIF()
--- /dev/null
+ADD_CUSTOM_TARGET(lock_btn.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images
+ ${CMAKE_CURRENT_SOURCE_DIR}/lock_btn.edc ${CMAKE_BINARY_DIR}/res/edje/mobile/lock_btn.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lock_btn.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} lock_btn.edj)
+INSTALL(FILES lock_btn.edj DESTINATION /usr/share/starter/res/edje)
+
+ADD_CUSTOM_TARGET(lock_pwd.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images
+ ${CMAKE_CURRENT_SOURCE_DIR}/lock_pwd.edc ${CMAKE_BINARY_DIR}/res/edje/mobile/lock_pwd.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lock_pwd.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} lock_pwd.edj)
+INSTALL(FILES lock_pwd.edj DESTINATION /usr/share/starter/res/edje)
--- /dev/null
+/*
+ * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+styles {
+ style {
+ name: "unlock_text";
+ base: "font=Tizen:style=Regular color=#FFFFFFFF color_class=ATO017 font_size=10 text_class=ATO017 style=shadow shadow_color=#000000bf align: 0.5 0.0 wrap=word";
+ }
+}
+
+#define TEXT_BUTTON_CLASS "ATO007"
+
+
+collections
+{
+ group
+ {
+ name: "elm/button/base/emg_cal_btn";
+ parts
+ {
+ part
+ {
+ name: "elm.swallow.content";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+ part
+ {
+ name: "elm.text";
+ type: TEXT;
+ effect: "SHADOW";
+ mouse_events: 1;
+ repeat_events: 1;
+ description
+ {
+ state: "default" 0.0;
+ fixed: 1 1;
+ color: 255 255 255 255;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ text
+ {
+ align: 0.0 0.5;
+ size: 28;
+ text_class: TEXT_BUTTON_CLASS;
+ }
+ }
+ description
+ {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 120;
+ }
+ }
+ }
+ programs
+ {
+ program
+ {
+ name: "mouse,clicked";
+ signal: "mouse,clicked,1";
+ source: "elm.swallow.content";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program
+ {
+ name: "button,pressed";
+ signal: "mouse,down,1";
+ action: STATE_SET "pressed" 0.0;
+ source: "elm.swallow.content";
+ target: "elm.text";
+ }
+ program
+ {
+ name: "button,unpressed";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ source: "elm.swallow.content";
+ target: "elm.text";
+ }
+ }
+ }
+
+ group
+ {
+ name: "elm/button/base/tizen_account_btn";
+ parts
+ {
+ part
+ {
+ name: "elm.swallow.content";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+ part
+ {
+ name: "elm.text";
+ type: TEXTBLOCK;
+ effect: "SHADOW";
+ mouse_events: 1;
+ repeat_events: 1;
+ description
+ {
+ state: "default" 0.0;
+ fixed: 1 1;
+ color: 255 255 255 255;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ text
+ {
+ style: "unlock_text";
+ }
+ }
+ description
+ {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 120;
+ }
+ }
+ }
+
+ programs
+ {
+ program
+ {
+ name: "mouse,clicked";
+ signal: "mouse,clicked,1";
+ source: "elm.swallow.content";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program
+ {
+ name: "button,pressed";
+ signal: "mouse,down,1";
+ action: STATE_SET "pressed" 0.0;
+ source: "elm.swallow.content";
+ target: "elm.text";
+ }
+ program
+ {
+ name: "button,unpressed";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ source: "elm.swallow.content";
+ target: "elm.text";
+ }
+ }
+ }
+
+ group
+ {
+ name: "elm/button/base/right_button";
+ parts
+ {
+ part
+ {
+ name: "elm.swallow.content";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 1.0 0.0;
+ }
+ }
+ part {
+ name: "effect";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description
+ {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description
+ {
+ state: "pressed" 0.0;
+ //color_class: AO018;
+ visible: 1;
+ rel1.to: "elm.text";
+ rel1.offset: -3 0;
+ rel2.to: "elm.text";
+ rel2.offset: 3 0;
+ }
+ }
+ part
+ {
+ name: "elm.text";
+ type: TEXT;
+ effect: "SHADOW";
+ mouse_events: 1;
+ repeat_events: 1;
+ description
+ {
+ state: "default" 0.0;
+ fixed: 1 1;
+ color: 255 255 255 255;
+ visible: 1;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 1.0 0.5;
+ max: -1 40;
+ text
+ {
+ align: 1.0 0.5;
+ size: 28;
+ //text_class: "ATO007";
+ min: 1 0;
+ ellipsis: -1;
+ }
+ }
+ }
+ }
+
+ programs
+ {
+ program
+ {
+ name: "mouse,clicked";
+ signal: "mouse,clicked,1";
+ source: "elm.swallow.content";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program
+ {
+ name: "button,pressed";
+ signal: "mouse,down,1";
+ action: STATE_SET "pressed" 0.0;
+ source: "elm.swallow.content";
+ target: "effect";
+ }
+ program
+ {
+ name: "button,unpressed";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ source: "elm.swallow.content";
+ target: "effect";
+ }
+ }
+ }
+
+ group
+ {
+ name: "elm/button/base/left_button";
+ parts
+ {
+ part
+ {
+ name: "elm.swallow.content";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "effect";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description
+ {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description
+ {
+ state: "pressed" 0.0;
+ color_class: AO018;
+ visible: 1;
+ rel1.to: "elm.text";
+ rel1.offset: -3 -3;
+ rel2.to: "elm.text";
+ rel2.offset: 3 3;
+ }
+ }
+ part
+ {
+ name: "elm.text";
+ type: TEXT;
+ effect: "SHADOW";
+ mouse_events: 1;
+ repeat_events: 1;
+ description
+ {
+ state: "default" 0.0;
+ fixed: 1 1;
+ color: 255 255 255 255;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ align: 0.0 0.5;
+ text
+ {
+ align: 0.0 0.5;
+ size: 28;
+ //text_class: "ATO007";
+ min: 1 0;
+ ellipsis: -1;
+ }
+ }
+ }
+ }
+
+ programs
+ {
+ program
+ {
+ name: "mouse,clicked";
+ signal: "mouse,clicked,1";
+ source: "elm.text";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program
+ {
+ name: "button,pressed";
+ signal: "mouse,down,1";
+ action: STATE_SET "pressed" 0.0;
+ source: "elm.text";
+ target: "effect";
+ }
+ program
+ {
+ name: "button,unpressed";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ source: "elm.text";
+ target: "effect";
+ }
+ }
+ }
+
+ group
+ {
+ name: "elm/button/base/center_button";
+ parts
+ {
+ part
+ {
+ name: "elm.swallow.content";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+ part
+ {
+ name: "elm.text";
+ type: TEXT;
+ effect: "SHADOW";
+ mouse_events: 1;
+ repeat_events: 1;
+ description
+ {
+ state: "default" 0.0;
+ fixed: 1 1;
+ color: 255 255 255 255;
+ visible: 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ text
+ {
+ align: 0.5 0.5;
+ size: 28;
+ //text_class: "ATO007";
+ }
+ }
+ description
+ {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 128;
+ }
+ }
+ }
+
+ programs
+ {
+ program
+ {
+ name: "mouse,clicked";
+ signal: "mouse,clicked,1";
+ source: "elm.swallow.content";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program
+ {
+ name: "button,pressed";
+ signal: "mouse,down,1";
+ action: STATE_SET "pressed" 0.0;
+ source: "elm.swallow.content";
+ target: "elm.text";
+ }
+ program
+ {
+ name: "button,unpressed";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ source: "elm.swallow.content";
+ target: "elm.text";
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define WINDOW_HEIGHT 960
+#define WINDOW_WIDTH 540
+#define INDICATOR_SIZE 38
+
+/* simple password */
+#define NUMBER_KEYPAD_PANEL_WIDTH WINDOW_WIDTH
+#define NUMBER_KEYPAD_PANEL_HEIGHT WINDOW_HEIGHT
+#define NUMBER_KEYPAD_BUTTON_WIDTH 112
+#define NUMBER_KEYPAD_BUTTON_HEIGHT 112
+#define NUMBER_KEYPAD_BUTTON_PAD_X 68
+#define NUMBER_KEYPAD_BUTTON_PAD_Y 10
+
+#define NUMBER_KEYPAD_REL_W(x) ((x)/NUMBER_KEYPAD_PANEL_WIDTH)
+#define NUMBER_KEYPAD_REL_H(y) ((y)/NUMBER_KEYPAD_PANEL_HEIGHT)
+#define NUMBER_KEYPAD_BUTTON_REL_W(x) ((x)/NUMBER_KEYPAD_BUTTON_WIDTH)
+#define NUMBER_KEYPAD_BUTTON_REL_H(y) ((y)/NUMBER_KEYPAD_BUTTON_HEIGHT)
+
+#define PASS_KEY_NUM_SIZE 54
+#define PASS_KEY_SUB_SIZE 24
+
+#define DOT_WIDTH 20
+#define DOT_HEIGHT 20
+
+/* simple password - button pressed color */
+#define LOCK_TEXT_COLOR 245 245 245 255
+#define LOCK_TEXT_COLOR2 0 0 0 0
+#define LOCK_TEXT_COLOR3 0 0 0 178
+#define BUTTON_PRESSED_COLOR 179 179 179 179
+
+/* complex password */
+#define LINE_COLOR "AO021"
+#define LINE_SHADOW_COLOR "AO017"
+#define INFO_FONT_COLOR "ATO033"
+#define PASS_FONT_COLOR "ATO035"
+#define PASS_FONT_SIZE 43
+#define INFO_FONT_SIZE 30
+
+#define IME_RESIZED 1
+#define IME_DOWN 2
+
+
+collections {
+ base_scale: 1.8;
+
+#include "lock_pwd_simple.edc"
+#include "lock_pwd_complex.edc"
+
+ group {
+ name: "lock_pwd";
+ parts {
+ part {
+ name: "bg";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+ part {
+ name: "sw.bg";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "bg"; }
+ rel2 { to: "bg"; }
+ }
+ }
+ part {
+ name: "sw.lock_pwd";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "bg"; }
+ rel2 { to: "bg"; }
+ }
+ }
+ }
+ programs {
+ }
+ }
+
+ group {
+ name: "lock-control-panel";
+ parts {
+ part {
+ name: "bg";
+ type: SPACER;
+ description {
+ state: "default" 0.0;
+ }
+ }
+ part {
+ name: "padding.top";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 0.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "padding.left";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 40/WINDOW_WIDTH 1.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "padding.right";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: (WINDOW_WIDTH - 40)/WINDOW_WIDTH 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "padding.bottom";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 65/110; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ description {
+ state: "button2_visible" 0.0;
+ rel1 { relative: 0.0 84/110; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "button1,bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ rel1 { to: "button1"; offset: -3 0; }
+ rel2 { to: "button1"; offset: 3 0; }
+ visible: 1;
+ min: 1 40;
+ color: 0 0 0 0;
+ }
+ description {
+ state: "pressed" 0.0;
+ fixed: 1 1;
+ rel1 { to: "button1"; offset: -3 0; }
+ rel2 { to: "button1"; offset: 3 0; }
+ visible: 1;
+ color_class: AO018;
+ min: 1 40;
+ }
+ }
+ part {
+ name: "button1";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ min: 300 40;
+ max: 300 40;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 0.5;
+ to_x: "padding.left";
+ to_y: "bg";
+ }
+ rel2 {
+ relative: 1.0 0.5;
+ to_x: "padding.left";
+ to_y: "bg";
+ }
+ }
+ description {
+ state: "button2_visible" 0.0;
+ inherit: "default";
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding.left";
+ to_y: "padding.top";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "padding.left";
+ to_y: "padding.top";
+ }
+ }
+ }
+ part {
+ name: "button2,bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "pressed" 0.0;
+ rel1 { to: "button2"; offset: -3 0; }
+ rel2 { to: "button2"; offset: 3 0; }
+ visible: 1;
+ color_class: AO018;
+ min: 1 40;
+ }
+ description {
+ state: "button2_visible" 0.0;
+ rel1 { to: "button2"; }
+ rel2 { to: "button2"; }
+ visible: 1;
+ color: 0 0 0 0;
+ min: 1 40;
+ }
+ }
+ part {
+ name: "button2";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "button2_visible" 0.0;
+ min: 300 40;
+ max: 300 40;
+ fixed: 1 1;
+ align: 0.0 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "padding.left";
+ to_y: "padding.bottom";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding.left";
+ to_y: "padding.bottom";
+ }
+ }
+ }
+ /* cancel */
+ part {
+ name: "button3.clipper";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "button3"; }
+ rel2 { to: "button3"; }
+ color: 255 255 255 255;
+ visible: 1;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ color: 178 178 178 178;
+ }
+ }
+ part {
+ name: "button3";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "button3.clipper";
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ fixed: 1 1;
+ min: 130 40;
+ max: 130 40;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 0.5;
+ to_x: "padding.right";
+ to_y: "bg";
+ }
+ rel2 {
+ relative: 0.0 0.5;
+ to_x: "padding.right";
+ to_y: "bg";
+ }
+ }
+ }
+ part {
+ name: "button3.block";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ repeat_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "button3"; }
+ rel2 { to: "button3"; }
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "show,button2";
+ signal: "show,button2";
+ source: "button2";
+ action: STATE_SET "button2_visible" 0.0;
+ target: "padding.bottom";
+ target: "button1";
+ target: "button2";
+ target: "button2,bg";
+ }
+ program {
+ name: "hide,button2";
+ signal: "hide,button2";
+ source: "button2";
+ action: STATE_SET "default" 0.0;
+ target: "padding.bottom";
+ target: "button1";
+ target: "button2";
+ target: "button2,bg";
+ }
+ program {
+ name: "button1,clicked";
+ signal: "mouse,clicked,1";
+ source: "button1,bg";
+ action: SIGNAL_EMIT "emg_button" "clicked";
+ }
+ program {
+ name: "button2,clicked";
+ signal: "mouse,clicked,1";
+ source: "button2,bg";
+ action: SIGNAL_EMIT "account_button" "clicked";
+ }
+ program {
+ name: "button1,down";
+ signal: "mouse,down,1";
+ source: "button1,bg";
+ action: STATE_SET "pressed" 0.0;
+ target: "button1,bg";
+ }
+ program {
+ name: "button1,up";
+ signal: "mouse,up,1";
+ source: "button1,bg";
+ action: STATE_SET "default" 0.0;
+ target: "button1,bg";
+ }
+ program {
+ name: "button2,down";
+ signal: "mouse,down,1";
+ source: "button2,bg";
+ action: STATE_SET "pressed" 0.0;
+ target: "button2,bg";
+ }
+ program {
+ name: "button2,up";
+ signal: "mouse,up,1";
+ source: "button2,bg";
+ action: STATE_SET "button2_visible" 0.0;
+ target: "button2,bg";
+ }
+ program {
+ signal: "button3,enable";
+ source: "prog";
+ action: STATE_SET "default" 0.0;
+ target: "button3.clipper";
+ target: "button3.block";
+ }
+ program {
+ signal: "button3,disable";
+ source: "prog";
+ action: STATE_SET "show" 0.0;
+ target: "button3.clipper";
+ target: "button3.block";
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+styles {
+ style {
+ name: "style_complex_title";
+ base: "font=Tizen:style=Regular color=#ffffffff color_class=ATO033 font_size=30 wrap=mixed align=center style=shadow shadow_color=#000000bf text_class=ATO033";
+ tag: "br" "\n";
+ tag: "hilight" "+ color=#ffff";
+ tag: "b" "+ color=#ffff";
+ tag: "tab" "\t";
+ }
+}
+
+ group {
+ name: "lock-complex-password";
+ parts {
+ part {
+ name: "bg";
+ type: SPACER;
+ description {
+ state: "default" 0.0;
+ }
+ }
+ part {
+ name: "title";
+ type: TEXTBLOCK;
+ effect: "SHADOW";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative : NUMBER_KEYPAD_REL_W(14) NUMBER_KEYPAD_REL_H(INDICATOR_SIZE+49); to : "bg"; }
+ rel2 { relative : NUMBER_KEYPAD_REL_W(526) NUMBER_KEYPAD_REL_H(INDICATOR_SIZE+49+42); to : "bg"; }
+ color_class: "ATO033";
+ fixed: 1 1;
+ text {
+ min: 0 1;
+ align: 0.5 0.5;
+ style: "style_complex_title";
+ text : "Enter PIN";
+ }
+ }
+ description {
+ state: "show_title" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "hide_title" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "entry";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { relative : NUMBER_KEYPAD_REL_W(34) NUMBER_KEYPAD_REL_H(INDICATOR_SIZE+49+42+42+18); to : "bg"; }
+ rel2 { relative : NUMBER_KEYPAD_REL_W(506) NUMBER_KEYPAD_REL_H(INDICATOR_SIZE+49+42+42+18+65); to : "bg"; }
+ }
+ }
+ part {
+ name: "underline";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: LINE_COLOR;
+ fixed: 1 1;
+ rel1 { relative: 0.0 1.0; to: "entry"; offset : 0 11; }
+ rel2 { relative: 1.0 1.0; to: "entry"; offset : 0 11; }
+ min: 0 3;
+ max: -1 3;
+ }
+ }
+ part {
+ name: "underline_shadow";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color_class: LINE_SHADOW_COLOR;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0; to: "underline"; }
+ rel2 { relative: 1.0 1.0; to: "underline"; }
+ min: 0 1;
+ max: -1 1;
+ }
+ }
+ /* Bottom : changed by IME height */
+ part {
+ name: "control_panel";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: 0.0 (INDICATOR_SIZE+312+478)/NUMBER_KEYPAD_PANEL_HEIGHT; to: "bg";
+ }
+ rel2 {
+ relative: 1.0 1.0; to: "bg";
+ }
+ }
+ }
+ }
+ program {
+ name: "show.title";
+ signal: "show_title";
+ action: STATE_SET "show_title" 0.0;
+ source: "title";
+ target: "title";
+ }
+ program {
+ name: "hide.title";
+ signal: "hide_title";
+ action: STATE_SET "hide_title" 0.0;
+ source: "title";
+ target: "title";
+ }
+ script {
+ public message(Msg_Type:type, id, ...) {
+ if((type == MSG_INT_SET) && (id == IME_RESIZED)) {
+ new h;
+ h = getarg(2);
+
+ custom_state(PART:"control_panel", "default", 0.0);
+ set_state_val(PART:"control_panel", STATE_REL1_OFFSET, 0, -1*h);
+ set_state_val(PART:"control_panel", STATE_REL2_OFFSET, 0, -1*h);
+ set_state(PART:"control_panel", "custom", 0.0);
+ }
+ if((type == MSG_INT_SET) && (id == IME_DOWN)) {
+ set_state(PART:"control_panel", "default", 0.0);
+ }
+ }
+ }
+ }
--- /dev/null
+/*
+ * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define PART_KEYPAD_BUTTON_NUMBER(keypad_button, offx, offy, button_number, button_text) \
+ part { \
+ name: keypad_button; \
+ type: RECT; \
+ scale: 1; \
+ mouse_events: 1; \
+ repeat_events: 1; \
+ description { \
+ state: "default" 0.0; \
+ color: 0 0 0 0; \
+ rel1 { relative: NUMBER_KEYPAD_REL_W(34+offx) NUMBER_KEYPAD_REL_H(38+312+offy); to:"bg";} \
+ rel2 { relative: NUMBER_KEYPAD_REL_W(34+offx+NUMBER_KEYPAD_BUTTON_WIDTH) NUMBER_KEYPAD_REL_H(38+312+offy+NUMBER_KEYPAD_BUTTON_HEIGHT); to:"bg"; } \
+ } \
+ description { \
+ state: "pressed" 0.0; \
+ inherit: "default" 0.0; \
+ } \
+ description { \
+ state: "hide" 0.0; \
+ visible: 0; \
+ } \
+ } \
+ part { \
+ name: keypad_button"_feedback"; \
+ type: IMAGE; \
+ scale: 1; \
+ repeat_events: 1; \
+ description { \
+ state: "default" 0.0; \
+ rel1.to: keypad_button; \
+ rel2.to: keypad_button; \
+ fixed: 1 1; \
+ image { \
+ normal: "keypad_press_bg.png"; \
+ } \
+ color_class: "AO018"; \
+ visible: 0; \
+ } \
+ description { \
+ state: "pressed" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+ part { \
+ name: keypad_button"_number"; \
+ type: TEXT; \
+ scale: 1; \
+ effect: "SHADOW"; \
+ mouse_events: 0; \
+ repeat_events: 1; \
+ description { \
+ state: "default" 0.0; \
+ visible: 1; \
+ rel1 { relative: 0.0 (14)/NUMBER_KEYPAD_BUTTON_HEIGHT; to: keypad_button;} \
+ rel2 { relative: 1.0 (14+50)/NUMBER_KEYPAD_BUTTON_HEIGHT; to: keypad_button;} \
+ fixed: 1 1; \
+ align: 0.5 0.5; \
+ color_class: PASS_KEY_NUM_COLOR; \
+ text { \
+ align: 0.5 0.5; \
+ size: PASS_KEY_NUM_SIZE; \
+ text: button_number; \
+ font: "Tizen:style=Regular"; \
+ text_class: "tizen"; \
+ } \
+ } \
+ description { \
+ state: "hide" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ description { \
+ state: "center" 0.0; \
+ inherit: "default" 0.0; \
+ rel1 { relative: 0.0 0.0; to: keypad_button;} \
+ rel2 { relative: 1.0 1.0; to: keypad_button;} \
+ align: 0.5 0.5; \
+ text { \
+ align: 0.5 0.5; \
+ size: PASS_KEY_NUM_SIZE; \
+ text: button_number; \
+ font: "Tizen:style=Regular"; \
+ text_class: "tizen"; \
+ } \
+ } \
+ } \
+ part { \
+ name: keypad_button"_text"; \
+ type: TEXT; \
+ scale: 1; \
+ effect: "SHADOW"; \
+ mouse_events: 0; \
+ repeat_events: 1; \
+ description { \
+ state: "default" 0.0; \
+ visible: 1; \
+ rel1 { relative: 0.0 (14+50+9)/NUMBER_KEYPAD_BUTTON_HEIGHT; to: keypad_button;} \
+ rel2 { relative: 1.0 (14+50+9+26)/NUMBER_KEYPAD_BUTTON_HEIGHT; to: keypad_button;} \
+ fixed: 1 1; \
+ align: 0.5 0.5; \
+ color_class: PASS_KEY_SUB_COLOR; \
+ text { \
+ size: PASS_KEY_SUB_SIZE; \
+ text: button_text; \
+ align: 0.5 0.5; \
+ font: "Tizen:style=Regular"; \
+ text_class: "tizen"; \
+ } \
+ } \
+ description { \
+ state: "hide" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ } \
+ }
+
+#define PROG_KEYPAD_BUTTON(keypad_button) \
+ program { \
+ name: "down_"keypad_button; \
+ signal: "mouse,down,*"; \
+ source: keypad_button; \
+ script { \
+ set_state(PART:keypad_button"_feedback", "pressed", 0.0); \
+ emit("keypad_down", keypad_button); \
+ } \
+ } \
+ program { \
+ name: "multi_down_"keypad_button; \
+ signal: "multi_down_"keypad_button; \
+ source: keypad_button; \
+ script { \
+ set_state(PART:keypad_button"_feedback", "pressed", 0.0); \
+ emit("keypad_down", keypad_button); \
+ } \
+ } \
+ program { \
+ name: "ani_"keypad_button; \
+ signal: "ani"; \
+ source: keypad_button; \
+ action: STATE_SET "default" 0.0; \
+ transition: SINUSOIDAL 0.05; \
+ target: keypad_button"_feedback"; \
+ } \
+ program { \
+ name: "up_"keypad_button; \
+ signal: "mouse,up,1"; \
+ source: keypad_button; \
+ script { \
+ emit("keypad_down_up", keypad_button); \
+ emit("ani", keypad_button); \
+ } \
+ } \
+ program { \
+ name: "multi_up_"keypad_button; \
+ signal: "multi_up_"keypad_button; \
+ source: keypad_button; \
+ script { \
+ emit("keypad_down_up", keypad_button); \
+ emit("ani", keypad_button); \
+ } \
+ } \
+ program { \
+ name: "clicked_"keypad_button; \
+ signal: "mouse,clicked,1"; \
+ source: keypad_button; \
+ script { \
+ emit("keypad_down_clicked", keypad_button); \
+ } \
+ } \
+ program { \
+ name: "multi_clicked_"keypad_button; \
+ signal: "multi_clicked_"keypad_button; \
+ source: keypad_button; \
+ script { \
+ emit("keypad_down_clicked", keypad_button); \
+ } \
+ } \
+
+
+#define PANEL_PART(idx) \
+ part { \
+ name: "dot"idx; \
+ type: IMAGE; \
+ description { \
+ state: "default" 0.0; \
+ min: DOT_WIDTH DOT_HEIGHT; \
+ max: DOT_WIDTH DOT_HEIGHT; \
+ rel1 { relative: NUMBER_KEYPAD_REL_W(105 + idx*(72+14)) NUMBER_KEYPAD_REL_H(38+156); to: "bg"; } \
+ rel2 { relative: NUMBER_KEYPAD_REL_W(105 + idx*(72+14)+72) NUMBER_KEYPAD_REL_H(38+156+72); to: "bg"; } \
+ fixed: 1 1; \
+ image { \
+ normal: "ls_password_dot.png"; \
+ } \
+ visible: 0; \
+ } \
+ description { \
+ state: "show" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+ part { \
+ name: "panel"idx; \
+ type: TEXT; \
+ effect: "SHADOW"; \
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: NUMBER_KEYPAD_REL_W(105 + idx*(72+14)) NUMBER_KEYPAD_REL_H(38+156); to: "bg"; } \
+ rel2 { relative: NUMBER_KEYPAD_REL_W(105 + idx*(72+14)+72) NUMBER_KEYPAD_REL_H(38+156+72); to: "bg"; } \
+ fixed: 1 1; \
+ text { \
+ size: 68; \
+ font: "Tizen:style=Regular"; \
+ text_class: "tizen"; \
+ } \
+ visible: 0; \
+ } \
+ description { \
+ state: "show" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ } \
+
+#define INPUT_PROGRAM(idx) \
+ program { \
+ name: "input_show"idx; \
+ action: STATE_SET "show" 0.0; \
+ source: "keyboard"; \
+ signal: "input_show"idx; \
+ target: "panel"idx; \
+ } \
+ program { \
+ name: "input_hide"idx; \
+ action: STATE_SET "default" 0.0; \
+ source: "keyboard"; \
+ signal: "input_hide"idx; \
+ target: "panel"idx; \
+ } \
+ program { \
+ name: "dot_show"idx; \
+ action: STATE_SET "show" 0.0; \
+ source: "keyboard"; \
+ signal: "dot_show"idx; \
+ target: "dot"idx; \
+ after: "input_hide"idx; \
+ } \
+ program { \
+ name: "dot_hide"idx; \
+ action: STATE_SET "default" 0.0; \
+ source: "keyboard"; \
+ signal: "dot_hide"idx; \
+ target: "dot"idx; \
+ after: "input_hide"idx; \
+ } \
+
+
+#define PART_DBG(part_name, R, G, B, A) \
+ part { \
+ name: part_name",dbg"; \
+ type: RECT; \
+ mouse_events: 1; \
+ repeat_events: 1; \
+ description { \
+ state: "default" 0.0; \
+ rel1 { relative: 0.0 0.0; to: part_name; } \
+ rel2 { relative: 1.0 1.0; to: part_name; } \
+ color: R G B A; \
+ } \
+ } \
+
+styles {
+ style {
+ name: "style_simple_title";
+ base: "font=Tizen:style=Regular color=#ffffffff color_class=ATO033 font_size=30 wrap=mixed align=center style=shadow shadow_color=#000000bf text_class=ATO033";
+ tag: "br" "\n";
+ tag: "hilight" "+ color=#ffff";
+ tag: "b" "+ color=#ffff";
+ tag: "tab" "\t";
+ }
+}
+
+ group {
+ name: "lock-simple-password";
+ images {
+ image: "ls_password_dot.png" COMP;
+ image: "ls_back_02_nor.png" COMP;
+ image: "ls_back_02_press.png" COMP;
+ image: "keypad_press_bg.png" COMP;
+ }
+ parts {
+ part {
+ name: "bg";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ }
+ }
+ part {
+ name: "title";
+ type: TEXTBLOCK;
+ effect: "SHADOW";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: NUMBER_KEYPAD_REL_W(14) NUMBER_KEYPAD_REL_H(INDICATOR_SIZE+70); to: "bg"; }
+ rel2 { relative: NUMBER_KEYPAD_REL_W(526) NUMBER_KEYPAD_REL_H((INDICATOR_SIZE+70+42)); to: "bg"; }
+ min: 512 42;
+ fixed: 1 1;
+ color_class: "ATO033";
+ text {
+ min: 0 1;
+ align: 0.5 0.5;
+ style: "style_simple_title";
+ text: "Enter PIN";
+ }
+ }
+ description {
+ state: "show_title" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "hide_title" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ PANEL_PART(0)
+ PANEL_PART(1)
+ PANEL_PART(2)
+ PANEL_PART(3)
+
+ PART_KEYPAD_BUTTON_NUMBER("1", 0, 0, "1", "");
+ PART_KEYPAD_BUTTON_NUMBER("2", NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X, 0, "2", "ABC");
+ PART_KEYPAD_BUTTON_NUMBER("3", 2*(NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X), 0, "3", "DEF");
+ PART_KEYPAD_BUTTON_NUMBER("4", 0, NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y, "4", "GHI");
+ PART_KEYPAD_BUTTON_NUMBER("5", NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X, NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y, "5", "JKL");
+ PART_KEYPAD_BUTTON_NUMBER("6", 2*(NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X), NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y, "6", "MNO");
+ PART_KEYPAD_BUTTON_NUMBER("7", 0, 2*(NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y), "7", "PQRS");
+ PART_KEYPAD_BUTTON_NUMBER("8", NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X, 2*(NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y), "8", "TUV");
+ PART_KEYPAD_BUTTON_NUMBER("9", 2*(NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X), 2*(NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y), "9", "WXYZ");
+ PART_KEYPAD_BUTTON_NUMBER("0", NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X, 3*(NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y), "0", "");
+
+ part {
+ name: "Backspace_feedback";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: NUMBER_KEYPAD_REL_W(34+2*(NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X)) NUMBER_KEYPAD_REL_H(INDICATOR_SIZE+312+3*(NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y));
+ to: "bg";
+ }
+ rel2 {
+ relative: NUMBER_KEYPAD_REL_W(34+2*(NUMBER_KEYPAD_BUTTON_WIDTH+NUMBER_KEYPAD_BUTTON_PAD_X)+NUMBER_KEYPAD_BUTTON_WIDTH) NUMBER_KEYPAD_REL_H(INDICATOR_SIZE+312+3*(NUMBER_KEYPAD_BUTTON_HEIGHT+NUMBER_KEYPAD_BUTTON_PAD_Y)+NUMBER_KEYPAD_BUTTON_HEIGHT);
+ to: "bg";
+ }
+ image {
+ normal: "keypad_press_bg.png";
+ }
+ color_class: "AO018";
+ visible: 0;
+ color: BUTTON_PRESSED_COLOR;
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part {
+ name: "Backspace";
+ type: IMAGE;
+ scale: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1.to: "Backspace_feedback";
+ rel2.to: "Backspace_feedback";
+ min: 92 68;
+ max: 92 68;
+ fixed: 1 1;
+ image.normal: "ls_back_02_nor.png";
+ align: 0.5 0.5;
+ }
+ description {
+ state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "ls_back_02_press.png";
+ }
+ }
+ /* Bottom */
+ part {
+ name: "control_panel";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: 0.0 (INDICATOR_SIZE+312+478)/NUMBER_KEYPAD_PANEL_HEIGHT; to: "bg";
+ }
+ rel2 {
+ relative: 1.0 1.0; to: "bg";
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ name: "init.layout";
+ signal: "load";
+ source: "";
+ script {
+ set_state(PART:"0_number", "center", 0.0);
+ }
+ }
+
+ INPUT_PROGRAM(0)
+ INPUT_PROGRAM(1)
+ INPUT_PROGRAM(2)
+ INPUT_PROGRAM(3)
+
+ PROG_KEYPAD_BUTTON("1")
+ PROG_KEYPAD_BUTTON("2")
+ PROG_KEYPAD_BUTTON("3")
+ PROG_KEYPAD_BUTTON("4")
+ PROG_KEYPAD_BUTTON("5")
+ PROG_KEYPAD_BUTTON("6")
+ PROG_KEYPAD_BUTTON("7")
+ PROG_KEYPAD_BUTTON("8")
+ PROG_KEYPAD_BUTTON("9")
+ PROG_KEYPAD_BUTTON("0")
+ PROG_KEYPAD_BUTTON("Backspace")
+ }
+ program {
+ name: "show.title";
+ signal: "show_title";
+ action: STATE_SET "show_title" 0.0;
+ source: "title";
+ target: "title";
+ }
+ program {
+ name: "hide.title";
+ signal: "hide_title";
+ action: STATE_SET "hide_title" 0.0;
+ source: "title";
+ target: "title";
+ }
+ }
+
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <E_DBus.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include "dbus_util.h"
+#include "util.h"
+
+#define DBUS_HOME_BUS_NAME "org.tizen.coreapps.home"
+#define DBUS_HOME_RAISE_PATH "/Org/Tizen/Coreapps/home/raise"
+#define DBUS_HOME_RAISE_INTERFACE DBUS_HOME_BUS_NAME".raise"
+#define DBUS_HOME_RAISE_MEMBER "homeraise"
+
+#define DBUS_REPLY_TIMEOUT (120 * 1000)
+
+#define POWEROFF_BUS_NAME "org.tizen.system.popup"
+#define POWEROFF_OBJECT_PATH "/Org/Tizen/System/Popup/Poweroff"
+#define POWEROFF_INTERFACE_NAME POWEROFF_BUS_NAME".Poweroff"
+#define METHOD_POWEROFF_NAME "PopupLaunch"
+
+#define CPU_BOOSTER_OBJECT_PATH DEVICED_OBJECT_PATH"/PmQos"
+#define CPU_BOOSTER_INTERFACE DEVICED_BUS_NAME".PmQos"
+#define METHOD_CPU_BOOSTER "AppLaunchHome"
+#define DBUS_CPU_BOOSTER_SEC 200
+
+#define METHOD_LOCK_PMQOS_NAME "LockScreen"
+#define DBUS_LOCK_PMQOS_SEC (2 * 1000)
+
+static struct _info {
+ DBusConnection *connection;
+} s_info = {
+ .connection = NULL,
+};
+
+
+
+static DBusConnection *_dbus_connection_get(void)
+{
+ DBusError derror;
+ DBusConnection *connection = NULL;
+
+ if (s_info.connection) {
+ return s_info.connection;
+ }
+
+ _W("no connection for dbus. get dbus connection");
+
+ dbus_error_init(&derror);
+ connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, &derror);
+ if (!connection) {
+ _E("Failed to get dbus connection:%s", derror.message);
+ dbus_error_free(&derror);
+ return NULL;
+ }
+ dbus_connection_setup_with_g_main(connection, NULL);
+ dbus_error_free(&derror);
+
+ s_info.connection = connection;
+
+ return s_info.connection;
+}
+
+
+
+static int _append_variant(DBusMessageIter *iter, const char *sig, char *param[])
+{
+ char *ch;
+ int i;
+ int int_type;
+ uint64_t int64_type;
+
+ if (!sig || !param)
+ return 0;
+
+ for (ch = (char*)sig, i = 0; *ch != '\0'; ++i, ++ch) {
+ switch (*ch) {
+ case 'i':
+ int_type = atoi(param[i]);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &int_type);
+ break;
+ case 'u':
+ int_type = atoi(param[i]);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &int_type);
+ break;
+ case 't':
+ int64_type = atoi(param[i]);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &int64_type);
+ break;
+ case 's':
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, ¶m[i]);
+ break;
+ default:
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+
+
+static DBusMessage *_invoke_dbus_method_sync(const char *dest, const char *path,
+ const char *interface, const char *method,
+ const char *sig, char *param[])
+{
+ DBusConnection *conn = NULL;
+ DBusMessage *msg;
+ DBusMessageIter iter;
+ DBusMessage *reply;
+ DBusError err;
+ int r;
+
+ conn = (DBusConnection *)_dbus_connection_get();
+ if (!conn) {
+ _E("dbus_bus_get error");
+ return NULL;
+ }
+
+ msg = dbus_message_new_method_call(dest, path, interface, method);
+ if (!msg) {
+ _E("dbus_message_new_method_call(%s:%s-%s)", path, interface, method);
+ return NULL;
+ }
+
+ dbus_message_iter_init_append(msg, &iter);
+ r = _append_variant(&iter, sig, param);
+ if (r < 0) {
+ _E("append_variant error(%d)", r);
+ dbus_message_unref(msg);
+ return NULL;
+ }
+
+ dbus_error_init(&err);
+
+ reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err);
+ dbus_message_unref(msg);
+ if (!reply) {
+ _E("dbus_connection_send error(%s:%s)", err.name, err.message);
+ dbus_error_free(&err);
+ return NULL;
+ }
+
+ return reply;
+}
+
+
+
+static int _invoke_dbus_method_async(const char *dest, const char *path,
+ const char *interface, const char *method,
+ const char *sig, char *param[])
+{
+ DBusConnection *conn;
+ DBusMessage *msg;
+ DBusMessageIter iter;
+ int r;
+
+ conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ if (!conn) {
+ _E("dbus_bus_get error");
+ return 0;
+ }
+
+ msg = dbus_message_new_method_call(dest, path, interface, method);
+ if (!msg) {
+ _E("dbus_message_new_method_call(%s:%s-%s)", path, interface, method);
+ return 0;
+ }
+
+ dbus_message_iter_init_append(msg, &iter);
+ r = _append_variant(&iter, sig, param);
+ if (r < 0) {
+ _E("append_variant error(%d)", r);
+ dbus_message_unref(msg);
+ return 0;
+ }
+
+ r = dbus_connection_send(conn, msg, NULL);
+ dbus_message_unref(msg);
+ if (r != TRUE) {
+ _E("dbus_connection_send error(%s:%s:%s-%s)", dest, path, interface, method);
+ return 0;
+ }
+
+ _D("dbus_connection_send, ret=%d", r);
+ return 1;
+}
+
+
+
+static int _dbus_message_send(const char *path, const char *interface, const char *member)
+{
+ int ret = 0;
+ DBusMessage *msg = NULL;
+ DBusConnection *conn = NULL;
+
+ conn = (DBusConnection *)_dbus_connection_get();
+ if (!conn) {
+ _E("dbus_bus_get error");
+ return -1;
+ }
+
+ msg = dbus_message_new_signal(path, interface, member);
+ if (!msg) {
+ _E("dbus_message_new_signal(%s:%s-%s)", path, interface, member);
+ return -1;
+ }
+
+ ret = dbus_connection_send(conn, msg, NULL); //async call
+ dbus_message_unref(msg);
+ if (ret != TRUE) {
+ _E("dbus_connection_send error(%s:%s-%s)", path, interface, member);
+ return -ECOMM;
+ }
+ _D("dbus_connection_send, ret=%d", ret);
+ return 0;
+}
+
+
+
+void dbus_util_send_home_raise_signal(void)
+{
+ int ret = 0;
+
+ ret = _dbus_message_send(
+ DBUS_HOME_RAISE_PATH,
+ DBUS_HOME_RAISE_INTERFACE,
+ DBUS_HOME_RAISE_MEMBER);
+ _E("Sending HOME RAISE signal, result:%d", ret);
+}
+
+
+
+int dbus_util_send_oomadj(int pid, int oom_adj_value)
+{
+ DBusError err;
+ DBusMessage *msg;
+ char *pa[4];
+ char buf1[BUF_SIZE_16];
+ char buf2[BUF_SIZE_16];
+ int ret, val;
+
+ if(pid <= 0){
+ _E("Pid is invalid");
+ return -1;
+ }
+
+ snprintf(buf1, sizeof(buf1), "%d", pid);
+ snprintf(buf2, sizeof(buf2), "%d", oom_adj_value);
+
+ pa[0] = DEVICED_SET_METHOD;
+ pa[1] = "2";
+ pa[2] = buf1;
+ pa[3] = buf2;
+
+ msg = _invoke_dbus_method_sync(DEVICED_BUS_NAME, DEVICED_PATH, DEVICED_INTERFACE, DEVICED_SET_METHOD, "siss", pa);
+ if (!msg)
+ return -EBADMSG;
+
+ dbus_error_init(&err);
+
+ ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &val, DBUS_TYPE_INVALID);
+ if (!ret) {
+ _E("no message : [%s:%s]", err.name, err.message);
+ val = -EBADMSG;
+ }
+
+ dbus_message_unref(msg);
+ dbus_error_free(&err);
+
+ _D("%s-%s : %d", DEVICED_INTERFACE, pa[0], val);
+ return val;
+}
+
+
+
+void dbus_util_send_cpu_booster_signal(void)
+{
+ int ret = 0;
+ char *arr[1];
+ char val[BUF_SIZE_32];
+
+ snprintf(val, sizeof(val), "%d", DBUS_CPU_BOOSTER_SEC);
+ arr[0] = val;
+
+ ret = _invoke_dbus_method_async(DEVICED_BUS_NAME, CPU_BOOSTER_OBJECT_PATH, CPU_BOOSTER_INTERFACE,
+ METHOD_CPU_BOOSTER, "i", arr);
+ ret_if(!ret);
+
+ _D("%s-%s", CPU_BOOSTER_INTERFACE, METHOD_CPU_BOOSTER);
+}
+
+
+
+void dbus_util_send_poweroff_signal(void)
+{
+ int ret = 0;
+
+ ret = _invoke_dbus_method_async(POWEROFF_BUS_NAME, POWEROFF_OBJECT_PATH, POWEROFF_INTERFACE_NAME,
+ METHOD_POWEROFF_NAME, NULL, NULL);
+ ret_if(!ret);
+
+ _D("%s-%s", POWEROFF_INTERFACE_NAME, METHOD_POWEROFF_NAME);
+}
+
+
+
+void dbus_util_send_lock_PmQos_signal(void)
+{
+ int ret = 0;
+
+ char *arr[1];
+ char val[BUF_SIZE_32];
+
+ snprintf(val, sizeof(val), "%d", DBUS_LOCK_PMQOS_SEC);
+ arr[0] = val;
+
+ ret = _invoke_dbus_method_async(DEVICED_BUS_NAME, CPU_BOOSTER_OBJECT_PATH, CPU_BOOSTER_INTERFACE,
+ METHOD_LOCK_PMQOS_NAME, "i", arr);
+ ret_if(!ret);
+
+ _D("%s-%s", CPU_BOOSTER_INTERFACE, METHOD_LOCK_PMQOS_NAME);
+}
+
+
+
+int dbus_util_receive_lcd_status(void (*changed_cb)(void *data, DBusMessage *msg), void *data)
+{
+ E_DBus_Connection *conn;
+ E_DBus_Signal_Handler *handler;
+
+ e_dbus_init();
+
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ _E("e_dbus_bus_get error");
+ return 0;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH,
+ DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON,
+ changed_cb, data);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return 0;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, DISPLAY_OBJECT_PATH,
+ DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF,
+ changed_cb, data);
+ if (handler == NULL) {
+ _E("e_dbus_signal_handler_add error");
+ return 0;
+ }
+
+ return 1;
+}
+
+char *dbus_util_msg_arg_get_str(DBusMessage *msg)
+{
+ int ret = 0;
+ DBusError derror;
+ const char *state = NULL;
+ dbus_error_init(&derror);
+
+ ret = dbus_message_get_args(msg, &derror, DBUS_TYPE_STRING, &state, DBUS_TYPE_INVALID);
+ goto_if(!ret, ERROR);
+
+ dbus_error_free(&derror);
+
+ return strdup(state);
+
+ERROR:
+ _E("Failed to get reply (%s:%s)", derror.name, derror.message);
+ dbus_error_free(&derror);
+
+ return NULL;
+}
+
+
+
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <ail.h>
-#include <bundle.h>
-#include <Elementary.h>
-
-#ifndef WAYLAND
-#include <Ecore_X.h>
-#include <utilX.h>
-#endif
-
-#include <Ecore_Input.h>
-#include <sysman.h>
-#include <syspopup_caller.h>
-#include <vconf.h>
-#include <system/media_key.h>
-
-#include "hw_key.h"
-#include "menu_daemon.h"
-#include "util.h"
-
-#define TASKMGR_PKG_NAME "org.tizen.taskmgr"
-#define CAMERA_PKG_NAME "org.tizen.camera-app"
-#define CALLLOG_PKG_NAME "org.tizen.calllog"
-#define MUSIC_PLAYER_PKG_NAME "org.tizen.music-player"
-
-
-
-static struct {
- Ecore_X_Window win;
- Ecore_Event_Handler *key_up;
- Ecore_Event_Handler *key_down;
- Ecore_Timer *long_press;
- Ecore_Timer *single_timer;
- Ecore_Timer *volume_up_long_press;
- Ecore_Timer *volume_down_long_press;
- Eina_Bool cancel;
-} key_info = {
- .win = 0x0,
- .key_up = NULL,
- .key_down = NULL,
- .long_press = NULL,
- .single_timer = NULL,
- .volume_up_long_press = NULL,
- .volume_down_long_press = NULL,
- .cancel = EINA_FALSE,
-};
-
-
-
-static Eina_Bool _launch_taskmgr_cb(void* data)
-{
- int val1 = -1;
- int val2 = -1;
- _D("Launch TASKMGR");
-
- key_info.long_press = NULL;
-
- if (vconf_get_int(VCONFKEY_PM_STATE, &val1) < 0) {
- _E("Cannot get VCONFKEY_PM_STATE");
- return ECORE_CALLBACK_CANCEL;
- }
- if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val2) < 0) {
- _E("Cannot get VCONFKEY_IDLE_LOCK_STATE");
- return ECORE_CALLBACK_CANCEL;
- }
-
- if ((val1 == VCONFKEY_PM_STATE_NORMAL) && (val2 == VCONFKEY_IDLE_UNLOCK)) {
- _D("LCD ON, UNLOCK state => launch taskmgr");
- if (menu_daemon_open_app(TASKMGR_PKG_NAME) < 0)
- _E("Failed to launch the taskmgr");
- } else {
- _D("Can't launch TASKMGR pm state : %d lock state : %d", val1, val2);
- }
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-
-static Eina_Bool _launch_by_home_key(void *data)
-{
- key_info.single_timer = NULL;
- syspopup_destroy_all();
- menu_daemon_open_homescreen(NULL);
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-
-inline static int _release_home_key(void)
-{
- retv_if(NULL == key_info.long_press, EXIT_SUCCESS);
- ecore_timer_del(key_info.long_press);
- key_info.long_press = NULL;
-
- if (NULL == key_info.single_timer) {
- key_info.single_timer = ecore_timer_add(0.3, _launch_by_home_key, NULL);
- return EXIT_SUCCESS;
- }
- ecore_timer_del(key_info.single_timer);
- key_info.single_timer = NULL;
-
- syspopup_destroy_all();
-
- return EXIT_SUCCESS;
-}
-
-
-
-inline static void _release_multimedia_key(const char *value)
-{
- ret_if(NULL == value);
-
- _D("Multimedia key is released with %s", value);
-
- bundle *b;
- b = bundle_create();
- if (!b) {
- _E("Cannot create bundle");
- return;
- }
- bundle_add(b, "multimedia_key", value);
-
- int ret;
- ret = menu_daemon_launch_app(MUSIC_PLAYER_PKG_NAME, b);
- if (ret < 0)
- _E("Failed to launch the running apps, ret : %d", ret);
-
- bundle_free(b);
-}
-
-
-
-static Eina_Bool _key_release_cb(void *data, int type, void *event)
-{
- Evas_Event_Key_Up *ev = event;
- int val = -1;
-
- _D("Released");
-
- if (!ev) {
- _D("Invalid event object");
- return ECORE_CALLBACK_RENEW;
- }
-
-#ifndef WAYLAND
- 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");
- }
-#endif
-
- 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;
- }
-
-#ifndef WAYLAND
- if (!strcmp(ev->keyname, KEY_SEND)) {
- _D("Launch calllog");
- if (menu_daemon_open_app(CALLLOG_PKG_NAME) < 0)
- _E("Failed to launch %s", CALLLOG_PKG_NAME);
- } else if(!strcmp(ev->keyname, KEY_CONFIG)) {
- _D("Launch camera");
- if (menu_daemon_open_app(CAMERA_PKG_NAME) < 0)
- _E("Failed to launch %s", CAMERA_PKG_NAME);
- } else if (!strcmp(ev->keyname, KEY_HOME)) {
- if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) {
- _D("Cannot get VCONFKEY_IDLE_LOCK_STATE");
- }
- if (val == VCONFKEY_IDLE_LOCK) {
- _D("lock state, ignore home key..!!");
- return ECORE_CALLBACK_RENEW;
- }
- if (key_info.long_press) {
- ecore_timer_del(key_info.long_press);
- key_info.long_press = NULL;
- }
-
- key_info.long_press = ecore_timer_add(0.5, _launch_taskmgr_cb, NULL);
- if (!key_info.long_press)
- _E("Failed to add timer for long press detection");
- } else if (!strcmp(ev->keyname, KEY_CANCEL)) {
- _D("Cancel button is pressed");
- key_info.cancel = EINA_TRUE;
- } else if (!strcmp(ev->keyname, KEY_MEDIA)) {
- _D("Media key is pressed");
- }
-#endif
-
- 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)
-{
-#ifndef WAYLAND
- 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);
-#endif
-}
-
-
-
-void destroy_key_window(void)
-{
-#ifndef WAYLAND
- 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();
-#endif
-}
-
-
-
-// End of a file
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <Elementary.h>
-
-#include <vconf.h>
-#include <vconf-keys.h>
-
-#include <glib.h>
-#include <poll.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <errno.h>
-
-#include "lockd-debug.h"
-#include "lock-daemon.h"
-#include "lockd-process-mgr.h"
-#include "lockd-window-mgr.h"
-#include "starter-util.h"
-#include "menu_daemon.h"
-
-static int phone_lock_pid;
-
-struct lockd_data {
- int lock_app_pid;
- int phone_lock_app_pid;
- int lock_type;
- Eina_Bool request_recovery;
- lockw_data *lockw;
- GPollFD *gpollfd;
-};
-
-#define PHLOCK_SOCK_PREFIX "/tmp/phlock"
-#define PHLOCK_SOCK_MAXBUFF 65535
-#define PHLOCK_APP_CMDLINE "/usr/apps/org.tizen.lockscreen/bin/lockscreen"
-#define PHLOCK_UNLOCK_CMD "unlock"
-#define PHLOCK_LAUNCH_CMD "launch_phone_lock"
-#define LAUNCH_INTERVAL 100*1000
-
-static int lockd_launch_app_lockscreen(struct lockd_data *lockd);
-
-static void lockd_unlock_lockscreen(struct lockd_data *lockd);
-
-static int _lockd_get_lock_type(void)
-{
- int lock_type = 0;
- int ret = 0;
-
- vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &lock_type);
-
- if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD ||
- lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
- ret = 1;
- } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE ||
- lock_type == SETTING_SCREEN_LOCK_TYPE_MOTION) {
- ret = 0;
- } else {
- ret = 2;
- }
-
- LOCKD_DBG("_lockd_get_lock_type ret(%d), lock_type (%d)", ret, lock_type);
-
- return ret;
-}
-
-static void _lockd_notify_pm_state_cb(keynode_t * node, void *data)
-{
- LOCKD_DBG("PM state Notification!!");
-
- struct lockd_data *lockd = (struct lockd_data *)data;
- int val = -1;
-
- if (lockd == NULL) {
- LOCKD_ERR("lockd is NULL");
- return;
- }
-
- if (vconf_get_int(VCONFKEY_PM_STATE, &val) < 0) {
- LOCKD_ERR("Cannot get VCONFKEY_PM_STATE");
- return;
- }
-
- if (val == VCONFKEY_PM_STATE_LCDOFF) {
- lockd->lock_type = _lockd_get_lock_type();
- lockd_launch_app_lockscreen(lockd);
- }
-}
-
-static void
-_lockd_notify_lock_state_cb(keynode_t * node, void *data)
-{
- LOCKD_DBG("lock state changed!!");
-
- struct lockd_data *lockd = (struct lockd_data *)data;
- int val = -1;
-
- if (lockd == NULL) {
- LOCKD_ERR("lockd is NULL");
- return;
- }
-
- if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) {
- LOCKD_ERR("Cannot get VCONFKEY_IDLE_LOCK_STATE");
- return;
- }
-
- if (val == VCONFKEY_IDLE_UNLOCK) {
- LOCKD_DBG("unlocked..!!");
- if (lockd->lock_app_pid != 0) {
- LOCKD_DBG("terminate lock app..!!");
- lockd_process_mgr_terminate_lock_app(lockd->lock_app_pid, 1);
- }
- }
-}
-
-static Eina_Bool lockd_set_lock_state_cb(void *data)
-{
- LOCKD_DBG("%s, %d", __func__, __LINE__);
- vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_LOCK);
- return ECORE_CALLBACK_CANCEL;
-}
-
-static void
-_lockd_notify_phone_lock_verification_cb(keynode_t * node, void *data)
-{
- LOCKD_DBG("%s, %d", __func__, __LINE__);
-
- struct lockd_data *lockd = (struct lockd_data *)data;
- int val = -1;
-
- if (lockd == NULL) {
- LOCKD_ERR("lockd is NULL");
- return;
- }
-
- if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) {
- LOCKD_ERR("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
- return;
- }
-
- if (val == TRUE) {
- lockd_window_mgr_finish_lock(lockd->lockw);
- vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
- }
-}
-
-static int lockd_app_dead_cb(int pid, void *data)
-{
- LOCKD_DBG("app dead cb call! (pid : %d)", pid);
-
- struct lockd_data *lockd = (struct lockd_data *)data;
-
- if (pid == lockd->lock_app_pid) {
- LOCKD_DBG("lock app(pid:%d) is destroyed.", pid);
-
- lockd_unlock_lockscreen(lockd);
- }
-
- menu_daemon_check_dead_signal(pid);
-
- return 0;
-
-}
-
-static Eina_Bool lockd_app_create_cb(void *data, int type, void *event)
-{
- struct lockd_data *lockd = (struct lockd_data *)data;
-
- if (lockd == NULL) {
- return ECORE_CALLBACK_PASS_ON;
- }
- LOCKD_DBG("%s, %d", __func__, __LINE__);
- if (lockd_window_set_window_effect(lockd->lockw, lockd->lock_app_pid,
- event) == EINA_TRUE) {
- if(lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid,
- event) == EINA_FALSE) {
- LOCKD_ERR("window is not matched..!!");
- }
- }
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool lockd_app_show_cb(void *data, int type, void *event)
-{
- struct lockd_data *lockd = (struct lockd_data *)data;
-
- if (lockd == NULL) {
- return EINA_TRUE;
- }
- LOCKD_DBG("%s, %d", __func__, __LINE__);
- if (lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid,
- event)) {
- ecore_idler_add(lockd_set_lock_state_cb, NULL);
- }
- return EINA_FALSE;
-}
-
-static int lockd_launch_app_lockscreen(struct lockd_data *lockd)
-{
- LOCKD_DBG("launch app lock screen");
-
- int call_state = -1, phlock_state = -1, factory_mode = -1, test_mode = -1;
- int r = 0;
-
- WRITE_FILE_LOG("%s", "Launch lockscreen in starter");
-
- if (lockd_process_mgr_check_lock(lockd->lock_app_pid) == TRUE) {
- LOCKD_DBG("Lock Screen App is already running.");
- r = lockd_process_mgr_restart_lock(lockd->lock_type);
- if (r < 0) {
- LOCKD_DBG("Restarting Lock Screen App is fail [%d].", r);
- usleep(LAUNCH_INTERVAL);
- } else {
- LOCKD_DBG("Restarting Lock Screen App, pid[%d].", r);
- return 1;
- }
- }
-
- vconf_get_int(VCONFKEY_CALL_STATE, &call_state);
- if (call_state != VCONFKEY_CALL_OFF) {
- LOCKD_DBG
- ("Current call state(%d) does not allow to launch lock screen.",
- call_state);
- return 0;
- }
-
- lockd->lock_app_pid =
- lockd_process_mgr_start_lock(lockd, lockd_app_dead_cb,
- lockd->lock_type);
- if (lockd->lock_app_pid < 0)
- return 0;
- lockd_window_mgr_finish_lock(lockd->lockw);
- lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb,
- lockd_app_show_cb);
-
- return 1;
-}
-
-static void lockd_unlock_lockscreen(struct lockd_data *lockd)
-{
- LOCKD_DBG("unlock lock screen");
- lockd->lock_app_pid = 0;
-
- vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK);
- lockd_window_mgr_finish_lock(lockd->lockw);
-}
-
-inline static void lockd_set_sock_option(int fd, int cli)
-{
- int size;
- int ret;
- struct timeval tv = { 1, 200 * 1000 };
-
- size = PHLOCK_SOCK_MAXBUFF;
- ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size));
- if(ret != 0)
- return;
- ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
- if(ret != 0)
- return;
- if (cli) {
- ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
- if(ret != 0)
- return;
- }
-}
-
-static int lockd_create_sock(void)
-{
- struct sockaddr_un saddr;
- int fd;
-
- fd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (fd < 0) {
- if (errno == EINVAL) {
- fd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (fd < 0) {
- LOCKD_DBG
- ("second chance - socket create error");
- return -1;
- }
- } else {
- LOCKD_DBG("socket error");
- return -1;
- }
- }
-
- bzero(&saddr, sizeof(saddr));
- saddr.sun_family = AF_UNIX;
-
- strncpy(saddr.sun_path, PHLOCK_SOCK_PREFIX, strlen(PHLOCK_SOCK_PREFIX));
- saddr.sun_path[strlen(PHLOCK_SOCK_PREFIX)] = 0;
-
- unlink(saddr.sun_path);
-
- if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
- LOCKD_DBG("bind error");
- close(fd);
- return -1;
- }
-
- if (chmod(saddr.sun_path, (S_IRWXU | S_IRWXG | S_IRWXO)) < 0) {
- LOCKD_DBG("failed to change the socket permission");
- close(fd);
- return -1;
- }
-
- lockd_set_sock_option(fd, 0);
-
- if (listen(fd, 10) == -1) {
- LOCKD_DBG("listen error");
- close(fd);
- return -1;
- }
-
- return fd;
-}
-
-static gboolean lockd_glib_check(GSource * src)
-{
- GSList *fd_list;
- GPollFD *tmp;
-
- fd_list = src->poll_fds;
- do {
- tmp = (GPollFD *) fd_list->data;
- if ((tmp->revents & (POLLIN | POLLPRI)))
- return TRUE;
- fd_list = fd_list->next;
- } while (fd_list);
-
- return FALSE;
-}
-
-static char *lockd_read_cmdline_from_proc(int pid)
-{
- int memsize = 32;
- char path[32];
- char *cmdline = NULL, *tempptr = NULL;
- FILE *fp = NULL;
-
- snprintf(path, sizeof(path), "/proc/%d/cmdline", pid);
-
- fp = fopen(path, "r");
- if (fp == NULL) {
- LOCKD_DBG("Cannot open cmdline on pid[%d]", pid);
- return NULL;
- }
-
- cmdline = malloc(32);
- if (cmdline == NULL) {
- LOCKD_DBG("%s", "Out of memory");
- fclose(fp);
- return NULL;
- }
-
- bzero(cmdline, memsize);
- if (fgets(cmdline, 32, fp) == NULL) {
- LOCKD_DBG("%s", "Cannot read cmdline");
- free(cmdline);
- fclose(fp);
- return NULL;
- }
-
- while (cmdline[memsize - 2] != 0) {
- cmdline[memsize - 1] = (char)fgetc(fp);
- tempptr = realloc(cmdline, memsize + 32);
- if (tempptr == NULL) {
- fclose(fp);
- LOCKD_DBG("%s", "Out of memory");
- return NULL;
- }
- cmdline = tempptr;
- bzero(cmdline + memsize, 32);
- fgets(cmdline + memsize, 32, fp);
- memsize += 32;
- }
-
- if (fp != NULL)
- fclose(fp);
- return cmdline;
-}
-
-static int lockd_sock_handler(void *data)
-{
- int cl;
- int len;
- int sun_size;
- int clifd = -1;
- char cmd[PHLOCK_SOCK_MAXBUFF];
- char *cmdline = NULL;
- int val = -1;
- int fd = -1;
- int recovery_state = -1;
- GPollFD *gpollfd;
-
- struct ucred cr;
- struct sockaddr_un lockd_addr;
- struct lockd_data *lockd = (struct lockd_data *)data;
-
- if ((lockd == NULL) || (lockd->gpollfd == NULL)) {
- LOCKD_DBG("lockd->gpollfd is NULL");
- return -1;
- }
- gpollfd = (GPollFD *)lockd->gpollfd;
- fd = gpollfd->fd;
-
- cl = sizeof(cr);
- sun_size = sizeof(struct sockaddr_un);
-
- if ((clifd =
- accept(fd, (struct sockaddr *)&lockd_addr,
- (socklen_t *) & sun_size)) == -1) {
- if (errno != EINTR)
- LOCKD_DBG("accept error");
- return -1;
- }
-
- if (getsockopt(clifd, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) & cl)
- < 0) {
- LOCKD_DBG("peer information error");
- close(clifd);
- return -1;
- }
- LOCKD_DBG("Peer's pid=%d, uid=%d, gid=%d\n", cr.pid, cr.uid, cr.gid);
-
- memset(cmd, 0, PHLOCK_SOCK_MAXBUFF);
-
- lockd_set_sock_option(clifd, 1);
-
- len = recv(clifd, cmd, PHLOCK_SOCK_MAXBUFF, 0);
- cmd[PHLOCK_SOCK_MAXBUFF - 1] = '\0';
-
- if (len != strlen(cmd)) {
- LOCKD_DBG("recv error %d %d", len, strlen(cmd));
- close(clifd);
- return -1;
- }
-
- LOCKD_DBG("cmd %s", cmd);
-
- cmdline = lockd_read_cmdline_from_proc(cr.pid);
- if (cmdline == NULL) {
- LOCKD_DBG("Error on opening /proc/%d/cmdline", cr.pid);
- close(clifd);
- return -1;
- }
-
- LOCKD_DBG("/proc/%d/cmdline : %s", cr.pid, cmdline);
- LOCKD_DBG("phone_lock_pid : %d vs cr.pid : %d", phone_lock_pid, cr.pid);
-
- if ((!strncmp(cmdline, PHLOCK_APP_CMDLINE, strlen(cmdline)))
- && (!strncmp(cmd, PHLOCK_UNLOCK_CMD, strlen(cmd)))) {
- LOCKD_DBG("cmd is %s\n", PHLOCK_UNLOCK_CMD);
-
- if (phone_lock_pid == cr.pid) {
- LOCKD_DBG("pid [%d] %s is verified, unlock..!!\n", cr.pid,
- cmdline);
- lockd_process_mgr_terminate_phone_lock(phone_lock_pid);
- phone_lock_pid = 0;
- vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, TRUE);
- }
- } else if (!strncmp(cmd, PHLOCK_LAUNCH_CMD, strlen(cmd))) {
- LOCKD_DBG("cmd is %s\n", PHLOCK_LAUNCH_CMD);
- if (_lockd_get_lock_type() == 1) {
- lockd->lock_type = 1;
- lockd_launch_app_lockscreen(lockd);
- }
- }
-
- if(cmdline != NULL) {
- free(cmdline);
- cmdline = NULL;
- }
-
- close(clifd);
- return 0;
-}
-
-static gboolean lockd_glib_handler(gpointer data)
-{
- if (lockd_sock_handler(data) < 0) {
- LOCKD_DBG("lockd_sock_handler is failed..!!");
- }
- return TRUE;
-}
-
-static gboolean lockd_glib_dispatch(GSource * src, GSourceFunc callback,
- gpointer data)
-{
- callback(data);
- return TRUE;
-}
-
-static gboolean lockd_glib_prepare(GSource * src, gint * timeout)
-{
- return FALSE;
-}
-
-static GSourceFuncs funcs = {
- .prepare = lockd_glib_prepare,
- .check = lockd_glib_check,
- .dispatch = lockd_glib_dispatch,
- .finalize = NULL
-};
-
-static int lockd_init_sock(struct lockd_data *lockd)
-{
- int fd;
- GPollFD *gpollfd;
- GSource *src;
- int ret;
-
- fd = lockd_create_sock();
- if (fd < 0) {
- LOCKD_DBG("lock daemon create sock failed..!!");
- }
-
- src = g_source_new(&funcs, sizeof(GSource));
-
- gpollfd = (GPollFD *) g_malloc(sizeof(GPollFD));
- gpollfd->events = POLLIN;
- gpollfd->fd = fd;
-
- lockd->gpollfd = gpollfd;
-
- g_source_add_poll(src, lockd->gpollfd);
- g_source_set_callback(src, (GSourceFunc) lockd_glib_handler,
- (gpointer) lockd, NULL);
- g_source_set_priority(src, G_PRIORITY_LOW);
-
- ret = g_source_attach(src, NULL);
- if (ret == 0)
- return -1;
-
- g_source_unref(src);
-
- return 0;
-}
-
-static void lockd_init_vconf(struct lockd_data *lockd)
-{
- int val = -1;
-
- if (vconf_notify_key_changed
- (VCONFKEY_PM_STATE, _lockd_notify_pm_state_cb, lockd) != 0) {
- LOCKD_ERR("Fail vconf_notify_key_changed : VCONFKEY_PM_STATE");
- }
-
- if (vconf_notify_key_changed
- (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION,
- _lockd_notify_phone_lock_verification_cb, lockd) != 0) {
- if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) {
- LOCKD_ERR
- ("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
- vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, 0);
- if (vconf_notify_key_changed
- (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION,
- _lockd_notify_phone_lock_verification_cb,
- lockd) != 0) {
- LOCKD_ERR
- ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
- }
- } else {
- LOCKD_ERR
- ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION);
- }
- }
-
- if (vconf_notify_key_changed
- (VCONFKEY_IDLE_LOCK_STATE,
- _lockd_notify_lock_state_cb,
- lockd) != 0) {
- LOCKD_ERR
- ("[Error] vconf notify : lock state");
- }
-}
-
-static void lockd_start_lock_daemon(void *data)
-{
- struct lockd_data *lockd = NULL;
- int r = 0;
-
- lockd = (struct lockd_data *)data;
-
- if (!lockd) {
- return;
- }
-
- LOCKD_DBG("%s, %d", __func__, __LINE__);
-
- lockd_init_vconf(lockd);
-
- r = lockd_init_sock(lockd);
- if (r < 0) {
- LOCKD_DBG("lockd init socket failed: %d", r);
- }
-
- lockd->lockw = lockd_window_init();
-
- aul_listen_app_dead_signal(lockd_app_dead_cb, data);
-
- LOCKD_DBG("%s, %d", __func__, __LINE__);
-}
-
-int start_lock_daemon(int launch_lock)
-{
- struct lockd_data *lockd = NULL;
- int val = -1;
- int recovery_state = -1;
- int first_boot = 0;
- int lock_type = 0;
- int ret = 0;
-
- LOCKD_DBG("%s, %d", __func__, __LINE__);
-
- lockd = (struct lockd_data *)malloc(sizeof(struct lockd_data));
- memset(lockd, 0x0, sizeof(struct lockd_data));
- lockd_start_lock_daemon(lockd);
-
- if (launch_lock == FALSE) {
- LOCKD_DBG("Don't launch lockscreen..");
- return 0;
- }
-
- if (vconf_get_bool(VCONFKEY_PWLOCK_FIRST_BOOT, &first_boot) < 0) {
- LOCKD_ERR("Cannot get %s vconfkey", VCONFKEY_PWLOCK_FIRST_BOOT);
- } else if (first_boot == 1) {
- LOCKD_DBG("first_boot : %d \n", first_boot);
- return 0;
- }
-
- lock_type = _lockd_get_lock_type();
- if (lock_type == 1) {
- lockd->request_recovery = FALSE;
- }
- lockd->lock_type = lock_type;
- ret = lockd_launch_app_lockscreen(lockd);
- return ret;
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <fcntl.h>
-#include <time.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <glib.h>
-
-#include "lockd-debug.h"
-
-#define LINEMAX 256
-#define MAXFILELEN 1048576
-#define LOGFILE "/tmp/starter.log"
-
-void lockd_log_t(char *fmt, ...)
-{
- va_list ap;
- FILE *fd = 0;
- char buf[LINEMAX] = { 0, };
- char debugString[LINEMAX] = { 0, };
-
- va_start(ap, fmt);
- vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
- int fileLen = 0;
- struct tm local_t;
- time_t current_time = 0;
- bzero((char *)&debugString, LINEMAX);
- time(¤t_time);
- gmtime_r(¤t_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);
- }
- }
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <vconf.h>
-#include <vconf-keys.h>
-
-#include <aul.h>
-
-#include "lockd-debug.h"
-#include "lockd-process-mgr.h"
-#include "starter-vconf.h"
-
-#define LOCKD_DEFAULT_PKG_NAME "org.tizen.lockscreen"
-#define LOCKD_DEFAULT_LOCKSCREEN "org.tizen.lockscreen"
-#define LOCKD_PHONE_LOCK_PKG_NAME "org.tizen.lockscreen"
-#define RETRY_MAXCOUNT 30
-#define RELAUNCH_INTERVAL 100*1000
-
-static char *_lockd_process_mgr_get_pkgname(void)
-{
- char *pkgname = NULL;
-
- pkgname = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
-
- LOCKD_DBG("pkg name is %s", pkgname);
-
- if (pkgname == NULL) {
- return LOCKD_DEFAULT_PKG_NAME;
- }
-
- return pkgname;
-}
-
-int lockd_process_mgr_restart_lock(int phone_lock_state)
-{
- char *lock_app_path = NULL;
- int pid;
-
- lock_app_path = _lockd_process_mgr_get_pkgname();
- pid = aul_launch_app(lock_app_path, NULL);
-
- LOCKD_DBG("Reset : aul_launch_app(%s, NULL), pid = %d", lock_app_path,
- pid);
-
- return pid;
-}
-
-int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *),
- int phone_lock_state)
-{
- char *lock_app_path = NULL;
- int pid;
- int ret;
-
- lock_app_path = _lockd_process_mgr_get_pkgname();
-
- int i;
- for (i=0; i<RETRY_MAXCOUNT; i++)
- {
- pid = aul_launch_app(lock_app_path, NULL);
-
- LOCKD_DBG("aul_launch_app(%s), pid = %d", lock_app_path, pid);
-
- if (pid == AUL_R_ECOMM) {
- LOCKD_DBG("Relaunch lock application [%d]times", i);
- usleep(RELAUNCH_INTERVAL);
- } else if (pid == AUL_R_ERROR) {
- LOCKD_DBG("launch[%s] is failed, launch default lock screen", lock_app_path);
- ret = vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, LOCKD_DEFAULT_LOCKSCREEN);
- if (ret != 0) {
- LOCKD_ERR("set failed");
- }
- pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, NULL);
- if (pid >0) {
- return pid;
- }
- } else {
- return pid;
- }
- }
- LOCKD_DBG("Relaunch lock application failed..!!");
- return pid;
-}
-
-int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *))
-{
- int pid = 0;
-
- int i;
- for (i=0; i<RETRY_MAXCOUNT; i++)
- {
- pid = aul_launch_app(LOCKD_DEFAULT_PKG_NAME, NULL);
-
- LOCKD_DBG("aul_launch_app(%s), pid = %d", LOCKD_DEFAULT_PKG_NAME, pid);
-
- if (pid == AUL_R_ECOMM) {
- LOCKD_DBG("Relaunch lock application [%d]times", i);
- usleep(RELAUNCH_INTERVAL);
- } else if (pid == AUL_R_ERROR) {
- LOCKD_DBG("launch[%s] is failed, launch default lock screen", LOCKD_DEFAULT_PKG_NAME);
- pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, NULL);
- if (pid >0) {
- return pid;
- }
- } else {
- return pid;
- }
- }
- LOCKD_DBG("Relaunch lock application failed..!!");
- return pid;
-}
-
-int lockd_process_mgr_start_phone_lock(void)
-{
- int pid = 0;
-
- pid = aul_launch_app(LOCKD_PHONE_LOCK_PKG_NAME, NULL);
- LOCKD_DBG("aul_launch_app(%s, b), pid = %d", LOCKD_PHONE_LOCK_PKG_NAME,
- pid);
- return pid;
-}
-
-void lockd_process_mgr_terminate_lock_app(int lock_app_pid, int state)
-{
- LOCKD_DBG
- ("lockd_process_mgr_terminate_lock_app, state:%d\n",
- state);
-
- if (state == 1) {
- if (lock_app_pid != 0) {
- LOCKD_DBG("Terminate Lock app(pid : %d)", lock_app_pid);
- aul_terminate_pid(lock_app_pid);
- }
- }
-}
-
-void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid)
-{
- LOCKD_DBG("Terminate Phone Lock(pid : %d)", phone_lock_pid);
- aul_terminate_pid(phone_lock_pid);
-}
-
-int lockd_process_mgr_check_lock(int pid)
-{
- char buf[128];
- LOCKD_DBG("%s, %d", __func__, __LINE__);
-
- if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) {
- LOCKD_DBG("no such pkg by pid %d\n", pid);
- } else {
- LOCKD_DBG("app pkgname = %s, pid = %d\n", buf, pid);
- if (aul_app_is_running(buf) == TRUE) {
- LOCKD_DBG("%s [pid = %d] is running\n", buf, pid);
- return TRUE;
- } else {
- LOCKD_DBG("[pid = %d] is exist but %s is not running\n",
- pid, buf);
- }
- }
- return FALSE;
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <Elementary.h>
-
-#ifndef WAYLAND
-#include <Ecore_X.h>
-#include <utilX.h>
-#endif
-
-#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;
-}
-
-#ifndef WAYLAND
-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;
-}
-#endif
-
-#ifndef WAYLAND
-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;
-
-}
-#endif
-
-Eina_Bool
-lockd_window_set_window_property(lockw_data * data, int lock_app_pid,
- void *event)
-{
-#ifndef WAYLAND
- 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;
- }
- }
-#endif
-
- return EINA_FALSE;
-}
-
-Eina_Bool
-lockd_window_set_window_effect(lockw_data * data, int lock_app_pid, void *event)
-{
-#ifndef WAYLAND
- 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);
-
-#if 0 //window effect is not available now
- utilx_set_window_effect_state(ecore_x_display_get(),
- user_window, 0);
-#endif
- return EINA_TRUE;
- }
- }
-#endif
-
- 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;
- }
-#ifndef WAYLAND
- 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);
-#endif
-}
-
-void lockd_window_mgr_finish_lock(lockw_data * lockw)
-{
-#ifndef WAYLAND
- 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;
- }
-#endif
-}
-
-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;
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <ail.h>
-#include <aul.h>
-#include <db-util.h>
-#include <Elementary.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <pkgmgr-info.h>
-#include <stdio.h>
-#include <sysman.h>
-#include <syspopup_caller.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <vconf.h>
-
-#include "hw_key.h"
-#include "pkg_event.h"
-#include "util.h"
-#include "xmonitor.h"
-
-
-int errno;
-
-
-#define QUERY_UPDATE_NAME "UPDATE app_info SET name='%s' where package='%s';"
-#define SAT_DESKTOP_FILE "/opt/share/applications/org.tizen.sat-ui.desktop"
-#define RELAUNCH_INTERVAL 100*1000
-#define RETRY_MAXCOUNT 30
-
-#define DEAD_TIMER_SEC 2.0
-#define DEAD_TIMER_COUNT_MAX 2
-#define MENU_SCREEN_PKG_NAME "org.tizen.menu-screen"
-
-static struct info {
- pid_t home_pid;
- pid_t volume_pid;
- int power_off;
-
- int dead_count;
- Ecore_Timer *dead_timer;
-} s_info = {
- .home_pid = -1,
- .volume_pid = -1,
- .power_off = 0,
-
- .dead_count = 0,
- .dead_timer = NULL,
-};
-
-
-
-#define RETRY_COUNT 5
-int menu_daemon_open_app(const char *pkgname)
-{
- register int i;
- int r = AUL_R_ETIMEOUT;
- for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) {
- r = aul_open_app(pkgname);
- if (0 <= r) return r;
- else {
- _D("aul_open_app error(%d)", r);
- _F("cannot open an app(%s) by %d", pkgname, r);
- }
- usleep(500000);
- }
-
- return r;
-}
-
-
-
-int menu_daemon_launch_app(const char *pkgname, bundle *b)
-{
- register int i;
- int r = AUL_R_ETIMEOUT;
- for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) {
- r = aul_launch_app(pkgname, b);
- if (0 <= r) return r;
- else {
- _D("aul_launch_app error(%d)", r);
- _F("cannot launch an app(%s) by %d", pkgname, r);
- }
- usleep(500000);
- }
-
- return r;
-}
-
-
-
-bool menu_daemon_is_homescreen(pid_t pid)
-{
- if (s_info.home_pid == pid) return true;
- return false;
-}
-
-
-
-inline char *menu_daemon_get_selected_pkgname(void)
-{
- char *pkgname = NULL;
-
- pkgname = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
- retv_if(NULL == pkgname, NULL);
-
- return pkgname;
-}
-
-
-
-static bool _exist_package(char *pkgid)
-{
- int ret = 0;
- pkgmgrinfo_pkginfo_h handle = NULL;
-
- ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
- if (PMINFO_R_OK != ret || NULL == handle) {
- _D("%s doesn't exist in this binary", pkgid);
- return false;
- }
-
- pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
-
- return true;
-}
-
-
-
-inline void menu_daemon_open_homescreen(const char *pkgname)
-{
- char *homescreen = NULL;
- char *tmp = NULL;
-
- system("echo -e '[${_G}menu-daemon launches home-screen${C_}]' > /dev/kmsg");
-
- if (NULL == pkgname) {
- tmp = menu_daemon_get_selected_pkgname();
- ret_if(NULL == tmp);
- homescreen = tmp;
- } else {
- homescreen = (char *) pkgname;
- }
-
- syspopup_destroy_all();
-
- int ret;
- ret = menu_daemon_open_app(homescreen);
- _D("can%s launch %s now. (%d)", ret < 0 ? "not" : "", homescreen, ret);
- if (ret < 0 && strcmp(homescreen, HOME_SCREEN_PKG_NAME) && _exist_package(HOME_SCREEN_PKG_NAME)) {
- _E("cannot launch package %s", homescreen);
-
- if (0 != vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME)) {
- _E("Cannot set value(%s) into key(%s)", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME);
- }
-
- while (AUL_R_ETIMEOUT == ret) {
- _E("Failed to open a default home, %s", HOME_SCREEN_PKG_NAME);
- ret = menu_daemon_open_app(HOME_SCREEN_PKG_NAME);
- }
- }
-
- if (ret < 0) {
- _E("Critical! Starter cannot launch anymore[%d]", ret);
- _F("Critical! Starter cannot launch anymore[%d]", ret);
- }
-
- s_info.home_pid = ret;
- if (ret > 0) {
- if (-1 == sysconf_set_mempolicy_bypid(ret, OOM_IGNORE)) {
- _E("Cannot set the memory policy for Home-screen(%d)", ret);
- } else {
- _D("Set the memory policy for Home-screen(%d)", ret);
- }
- }
-
- if (tmp) free(tmp);
-}
-
-
-
-static void _show_cb(keynode_t* node, void *data)
-{
- int seq;
-
- _D("[MENU_DAEMON] _show_cb is invoked");
-
- if (node) {
- seq = vconf_keynode_get_int(node);
- } else {
- if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) {
- _E("Failed to get sequence info");
- return;
- }
- }
-
- switch (seq) {
- case 0:
- if (s_info.home_pid > 0) {
- int pid;
- _D("pid[%d] is terminated.", s_info.home_pid);
- pid = s_info.home_pid;
- s_info.home_pid = -1;
-
- if (aul_terminate_pid(pid) != AUL_R_OK)
- _E("Failed to terminate %d", s_info.home_pid);
- }
- break;
- case 1:
- menu_daemon_open_homescreen(NULL);
- break;
- default:
- _E("False sequence [%d]", seq);
- break;
- }
-
- return;
-}
-
-
-
-static void _pkg_changed(keynode_t* node, void *data)
-{
- char *pkgname;
- int seq;
-
- if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) {
- _E("Do nothing, there is no sequence info yet");
- return;
- }
-
- if (seq < 1) {
- _E("Sequence is not ready yet, do nothing");
- return;
- }
-
- _D("_pkg_changed is invoked");
-
- pkgname = menu_daemon_get_selected_pkgname();
- if (!pkgname)
- return;
-
- _D("pkg_name : %s", pkgname);
-
- if (s_info.home_pid > 0) {
- char old_pkgname[256];
-
- if (aul_app_get_pkgname_bypid(s_info.home_pid, old_pkgname, sizeof(old_pkgname)) == AUL_R_OK) {
- if (!strcmp(pkgname, old_pkgname)) {
- _D("Package is changed but same package is selected");
- free(pkgname);
- return;
- }
- }
-
- if (AUL_R_OK != aul_terminate_pid(s_info.home_pid))
- _D("Failed to terminate pid %d", s_info.home_pid);
-
- s_info.dead_count = 0;
- if (s_info.dead_timer) {
- ecore_timer_del(s_info.dead_timer);
- s_info.dead_timer = NULL;
- }
- } else {
- /* If there is no running home */
- menu_daemon_open_homescreen(pkgname);
- }
-
- free(pkgname);
- return;
-}
-
-
-
-static void _launch_volume(void)
-{
- int pid;
- int i;
- _D("_launch_volume");
-
- for (i=0; i<RETRY_MAXCOUNT; i++)
- {
- pid = syspopup_launch("volume", NULL);
-
- _D("syspopup_launch(volume), pid = %d", pid);
-
- if (pid <0) {
- _D("syspopup_launch(volume)is failed [%d]times", i);
- usleep(RELAUNCH_INTERVAL);
- } else {
- s_info.volume_pid = pid;
- return;
- }
- }
-}
-
-static Eina_Bool _dead_timer_cb(void *data)
-{
- char *appid = (char *)data;
- retv_if(!appid, ECORE_CALLBACK_CANCEL);
-
- _D("dead count : %s(%d)", appid, s_info.dead_count);
-
- if (s_info.dead_count >= DEAD_TIMER_COUNT_MAX) {
- _D("Change homescreen package to default");
- if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) {
- _D("cannot set the vconfkey as : %s", MENU_SCREEN_PKG_NAME);
- return ECORE_CALLBACK_CANCEL;
- }
- }
-
- s_info.dead_timer = NULL;
- s_info.dead_count = 0;
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-int menu_daemon_check_dead_signal(int pid)
-{
- if (s_info.power_off) {
- _D("Power off. ignore dead cb\n");
- return 0;
- }
-
- _D("Process %d is termianted", pid);
-
- if (pid < 0)
- return 0;
-
- if (pid == s_info.home_pid) {
- s_info.dead_count++;
- _D("home dead count : %d", s_info.dead_count);
-
- char *pkgname = NULL;
- pkgname = menu_daemon_get_selected_pkgname();
- retv_if(NULL == pkgname, 0);
-
- if (!s_info.dead_timer) {
- _D("Add dead timer");
- s_info.dead_timer = ecore_timer_add(DEAD_TIMER_SEC, _dead_timer_cb, (void *)pkgname);
- }
-
- _D("pkg_name : %s", pkgname);
- menu_daemon_open_homescreen(pkgname);
- free(pkgname);
- } else if (pid == s_info.volume_pid) {
- _launch_volume();
- } else {
- _D("Unknown process, ignore it (pid %d, home pid %d)",
- pid, s_info.home_pid);
- }
-
-
- return 0;
-}
-
-
-
-void menu_daemon_init(void *data)
-{
- _D( "[MENU_DAEMON]menu_daemon_init is invoked");
-
- aul_launch_init(NULL,NULL);
-
- create_key_window();
- if (xmonitor_init() < 0) _E("cannot init xmonitor");
-
- pkg_event_init();
- _launch_volume();
-
- if (unlink(SAT_DESKTOP_FILE) != 0)
- _E("cannot remove sat-ui desktop.");
-
- if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed, NULL) < 0)
- _E("Failed to add the callback for package change event");
-
- if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb, NULL) < 0)
- _E("Failed to add the callback for show event");
-
- _pkg_changed(NULL, NULL);
- vconf_set_int(VCONFKEY_IDLE_SCREEN_LAUNCHED, VCONFKEY_IDLE_SCREEN_LAUNCHED_TRUE);
-}
-
-
-
-void menu_daemon_fini(void)
-{
- if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed) < 0)
- _E("Failed to ignore the callback for package change event");
-
- if (vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb) < 0)
- _E("Failed to ignore the callback for show event");
-
- xmonitor_fini();
- pkg_event_fini();
- destroy_key_window();
-}
-
-
-
-// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <aul.h>
+#include <app.h>
+#include <db-util.h>
+#include <Elementary.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pkgmgr-info.h>
+#include <stdio.h>
+#include <dd-deviced.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <vconf.h>
+
+#include "util.h"
+#include "dbus_util.h"
+#include "status.h"
+#include "process_mgr.h"
+#include "popup.h"
+
+#define HOME_TERMINATED "home_terminated"
+#define ISTRUE "TRUE"
+#define SYSPOPUPID_VOLUME "volume"
+
+#define DEAD_TIMER_SEC 2.0
+#define DEAD_TIMER_COUNT_MAX 2
+
+#define VCONFKEY_STARTER_IS_FALLBACK "db/starter/is_fallback"
+#define VCONFKEY_STARTER_FALLBACK_PKG "db/starter/fallback_pkg"
+
+
+
+int errno;
+static struct {
+ pid_t home_pid;
+ pid_t volume_pid;
+ int power_off;
+
+ Ecore_Timer *dead_timer;
+ int dead_count;
+
+ Evas_Object *popup;
+} s_home_mgr = {
+ .home_pid = (pid_t)-1,
+ .volume_pid = (pid_t)-1,
+ .power_off = 0,
+
+ .dead_timer = NULL,
+ .dead_count = 0,
+
+ .popup = NULL,
+};
+
+
+
+static void _after_launch_home(int pid)
+{
+ if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_HOMESCREEN) < 0){
+ _E("failed to send oom dbus signal");
+ }
+ s_home_mgr.home_pid = pid;
+}
+
+
+
+static int _change_home_cb(const char *appid, const char *key, const char *value, void *cfn, void *afn)
+{
+ if (!strcmp(appid, MENU_SCREEN_PKG_NAME)) {
+ _E("We cannot do anything anymore.");
+ } else if (!strcmp(appid, status_active_get()->setappl_selected_package_name)) {
+ if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) {
+ _E("cannot set the vconf key as %s", MENU_SCREEN_PKG_NAME);
+ }
+ /* change_home func will be called by changing the home */
+ return 0;
+ }
+ _E("cannot change home");
+ return -1;
+}
+
+
+
+#define SERVICE_OPERATION_MAIN_KEY "__APP_SVC_OP_TYPE__"
+#define SERVICE_OPERATION_MAIN_VALUE "http://tizen.org/appcontrol/operation/main"
+void home_mgr_open_home(const char *appid)
+{
+ char *home_appid = NULL;
+
+ if (status_passive_get()->idle_screen_safemode) {
+ home_appid = MENU_SCREEN_PKG_NAME;
+ } else if (!appid) {
+ home_appid = status_active_get()->setappl_selected_package_name;
+ } else {
+ home_appid = (char *) appid;
+ }
+ ret_if(!home_appid);
+
+ if (!strncmp(home_appid, MENU_SCREEN_PKG_NAME, strlen(home_appid))) {
+ process_mgr_must_launch(home_appid, SERVICE_OPERATION_MAIN_KEY, SERVICE_OPERATION_MAIN_VALUE, _change_home_cb, _after_launch_home);
+ } else {
+ process_mgr_must_open(home_appid, _change_home_cb, _after_launch_home);
+ }
+}
+
+
+
+static int _show_home_cb(status_active_key_e key, void *data)
+{
+ int seq = status_active_get()->starter_sequence;
+ int is_fallback = 0;
+ char *fallback_pkg = NULL;
+
+ _D("[MENU_DAEMON] _show_home_cb is invoked(%d)", seq);
+
+ switch (seq) {
+ case 0:
+ if (s_home_mgr.home_pid > 0) {
+ _D("Home[%d] has to be terminated.", s_home_mgr.home_pid);
+ if (aul_terminate_pid(s_home_mgr.home_pid) != AUL_R_OK) {
+ _E("Failed to terminate %d", s_home_mgr.home_pid);
+ }
+ s_home_mgr.home_pid = -1; /* to freeze the dead_cb */
+ }
+ break;
+ case 1:
+ if (vconf_get_int(VCONFKEY_STARTER_IS_FALLBACK, &is_fallback) < 0) {
+ _E("Failed to get vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK);
+ }
+
+ if (is_fallback) {
+ fallback_pkg = vconf_get_str(VCONFKEY_STARTER_FALLBACK_PKG);
+ if (!fallback_pkg) {
+ _E("Failed to get vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG);
+ home_mgr_open_home(NULL);
+ break;
+ }
+ _D("fallback pkg : %s", fallback_pkg);
+
+ if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, fallback_pkg) < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
+ home_mgr_open_home(NULL);
+ free(fallback_pkg);
+ break;
+ }
+
+ if (vconf_set_int(VCONFKEY_STARTER_IS_FALLBACK, 0)) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK);
+ }
+
+ free(fallback_pkg);
+ } else {
+ home_mgr_open_home(NULL);
+ }
+ break;
+ default:
+ _E("False sequence [%d]", seq);
+ break;
+ }
+
+ return 1;
+}
+
+
+
+static int _change_selected_package_name(status_active_key_e key, void *data)
+{
+ char *appid = NULL;
+ int seq = status_active_get()->starter_sequence;
+
+ if (seq < 1) {
+ _E("Sequence is not ready yet, do nothing");
+ return 1;
+ }
+
+ _D("_change_selected_package_name is invoked");
+
+ appid = status_active_get()->setappl_selected_package_name;
+ if (!appid) {
+ return 1;
+ }
+ _SECURE_D("pkg_name : %s", appid);
+
+ if (s_home_mgr.home_pid > 0) {
+ char old_appid[BUF_SIZE_512] = { 0 , };
+
+ if (aul_app_get_pkgname_bypid(s_home_mgr.home_pid, old_appid, sizeof(old_appid)) == AUL_R_OK) {
+ if (!strcmp(appid, old_appid)) {
+ _D("Package is changed but same package is selected");
+ return 1;
+ }
+ }
+
+ if (AUL_R_OK != aul_terminate_pid(s_home_mgr.home_pid)) {
+ _D("Failed to terminate pid %d", s_home_mgr.home_pid);
+ }
+ s_home_mgr.home_pid = -1;
+ s_home_mgr.dead_count = 0;
+ if (s_home_mgr.dead_timer) {
+ ecore_timer_del(s_home_mgr.dead_timer);
+ s_home_mgr.dead_timer = NULL;
+ }
+ }
+
+ home_mgr_open_home(appid);
+
+ return 1;
+}
+
+
+
+static void _after_launch_volume(int pid)
+{
+ if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_DEFAULT) < 0){
+ _E("failed to send oom dbus signal");
+ }
+ s_home_mgr.volume_pid = pid;
+}
+
+
+
+static void _launch_after_home(int pid)
+{
+ if (pid > 0) {
+ if(dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_HOMESCREEN) < 0){
+ _E("failed to send oom dbus signal");
+ }
+ }
+ s_home_mgr.home_pid = pid;
+}
+
+
+
+static void _launch_home(const char *appid)
+{
+ const char *home_appid = NULL;
+
+ if (status_passive_get()->idle_screen_safemode) {
+ home_appid = MENU_SCREEN_PKG_NAME;
+ } else if (!appid) {
+ home_appid = status_active_get()->setappl_selected_package_name;
+ } else {
+ home_appid = (char *) appid;
+ }
+ ret_if(!home_appid);
+
+ process_mgr_must_launch(home_appid, HOME_TERMINATED, ISTRUE, _change_home_cb, _launch_after_home);
+}
+
+
+
+static void _popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ _D("popup is deleted");
+
+ s_home_mgr.popup = NULL;
+}
+
+
+
+static Eina_Bool _dead_timer_cb(void *data)
+{
+ Evas_Object *popup = NULL;
+ char title[BUF_SIZE_128] = { 0, };
+ char text[BUF_SIZE_1024] = { 0, };
+
+ char *appid = (char *)data;
+ retv_if(!appid, ECORE_CALLBACK_CANCEL);
+
+ _D("dead count : %s(%d)", appid, s_home_mgr.dead_count);
+
+ if (s_home_mgr.dead_count >= DEAD_TIMER_COUNT_MAX) {
+ _D("Change homescreen package to default");
+
+ if (vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, MENU_SCREEN_PKG_NAME) != 0) {
+ _E("cannot set the vconf key as %s", MENU_SCREEN_PKG_NAME);
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ strncpy(title, _("IDS_COM_POP_WARNING"), sizeof(title));
+ title[sizeof(title) - 1] = '\0';
+
+ snprintf(text, sizeof(text), _("IDS_IDLE_POP_UNABLE_TO_LAUNCH_PS"), appid);
+ _D("title : %s / text : %s", title, text);
+
+ if (!s_home_mgr.popup) {
+ popup = popup_create(title, text);
+ if (!popup) {
+ _E("Failed to create popup");
+ } else {
+ s_home_mgr.popup = popup;
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+ }
+ }
+
+ /* set fallback status */
+ if (vconf_set_int(VCONFKEY_STARTER_IS_FALLBACK, 1) < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_IS_FALLBACK);
+ }
+
+ if (vconf_set_str(VCONFKEY_STARTER_FALLBACK_PKG, appid) < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_STARTER_FALLBACK_PKG);
+ }
+ }
+
+ s_home_mgr.dead_timer = NULL;
+ s_home_mgr.dead_count = 0;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+int home_mgr_check_dead_signal(int pid, void *data)
+{
+ char *appid = NULL;
+
+ _D("Process %d is termianted", pid);
+
+ if (pid < 0) {
+ _E("pid : %d", pid);
+ return 0;
+ }
+
+ if (s_home_mgr.power_off) {
+ _E("power off");
+ return 0;
+ }
+
+ appid = status_active_get()->setappl_selected_package_name;
+ if (!appid) {
+ _E("appid is NULL");
+ return 0;
+ }
+
+ if (pid == s_home_mgr.home_pid) {
+ s_home_mgr.dead_count++;
+ _D("home dead count : %d", s_home_mgr.dead_count);
+
+ if (!s_home_mgr.dead_timer) {
+ _D("Add dead timer");
+ s_home_mgr.dead_timer = ecore_timer_add(DEAD_TIMER_SEC, _dead_timer_cb, (void *)appid);
+ }
+
+ _launch_home(appid);
+ } else if (pid == s_home_mgr.volume_pid) {
+ process_mgr_must_syspopup_launch(SYSPOPUPID_VOLUME, NULL, NULL, NULL, _after_launch_volume);
+ } else {
+ _D("Unknown process, ignore it (dead pid %d, home pid %d)", pid, s_home_mgr.home_pid);
+ }
+
+ return 0;
+}
+
+
+
+static int _power_off_cb(status_active_key_e key, void *data)
+{
+ int val = status_active_get()->sysman_power_off_status;
+
+ if (val == VCONFKEY_SYSMAN_POWER_OFF_DIRECT || val == VCONFKEY_SYSMAN_POWER_OFF_RESTART) {
+ s_home_mgr.power_off = 1;
+ } else {
+ s_home_mgr.power_off = 0;
+ }
+
+ _D("power off status : %d", s_home_mgr.power_off);
+
+ return 1;
+}
+
+
+
+static Eina_Bool _launch_volume_idler_cb(void *data)
+{
+ process_mgr_must_syspopup_launch(SYSPOPUPID_VOLUME, NULL, NULL, NULL, _after_launch_volume);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+void home_mgr_init(void *data)
+{
+ _D( "[MENU_DAEMON]home_mgr_init is invoked");
+
+ status_active_register_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _show_home_cb, NULL);
+ status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL);
+ status_active_register_cb(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, _change_selected_package_name, NULL);
+ _change_selected_package_name(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, NULL);
+
+ ecore_idler_add(_launch_volume_idler_cb, NULL);
+
+ aul_listen_app_dead_signal(home_mgr_check_dead_signal, NULL);
+}
+
+
+
+void home_mgr_fini(void)
+{
+ if (s_home_mgr.volume_pid > 0) {
+ process_mgr_terminate_app(s_home_mgr.volume_pid, 1);
+ s_home_mgr.volume_pid = -1;
+ }
+
+ status_active_unregister_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _show_home_cb);
+ status_active_unregister_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb);
+ status_active_unregister_cb(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, _change_selected_package_name);
+}
+
+
+
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <app.h>
+#include <bundle.h>
+#include <Elementary.h>
+//#include <Ecore_X.h>
+#include <Ecore_Input.h>
+#include <dd-deviced.h>
+#include <syspopup_caller.h>
+//#include <utilX.h>
+#include <vconf.h>
+#include <system/media_key.h>
+#include <aul.h>
+#include <feedback.h>
+
+#include "hw_key.h"
+#include "home_mgr.h"
+#include "util.h"
+#include "dbus_util.h"
+#include "lock_mgr.h"
+#include "status.h"
+#include "process_mgr.h"
+#include "lock_pwd_util.h"
+
+#define APPID_CAMERA "org.tizen.camera-app"
+#define APPID_CALLLOG "org.tizen.calllog"
+#define APPID_MUSIC_PLAYER "org.tizen.music-player"
+#define APPID_TASKMGR "org.tizen.task-mgr"
+#define APPID_BROWSER "org.tizen.browser"
+#define APPID_EMAIL "org.tizen.email"
+#define APPID_DIALER "org.tizen.phone"
+
+#define STR_ATOM_XKEY_COMPOSITION "_XKEY_COMPOSITION"
+#define STR_ATOM_KEYROUTER_NOTIWINDOW "_KEYROUTER_NOTIWINDOW"
+
+#define LONG_PRESS_TIMER_SEC 0.4
+#define HOMEKEY_TIMER_SEC 0.2
+#define CANCEL_KEY_TIMER_SEC 0.3
+
+static struct {
+ //Ecore_X_Window win;
+ Ecore_Event_Handler *key_up;
+ Ecore_Event_Handler *key_down;
+ Ecore_Timer *home_long_press_timer;
+ Ecore_Timer *home_multi_press_timer;
+ Eina_Bool cancel;
+ //Ecore_X_Window keyrouter_notiwindow;
+ int homekey_count;
+} key_info = {
+ //.win = 0x0,
+ .key_up = NULL,
+ .key_down = NULL,
+ .home_long_press_timer = NULL,
+ .home_multi_press_timer = NULL,
+ .cancel = EINA_FALSE,
+ //.keyrouter_notiwindow = 0x0,
+ .homekey_count = 0,
+};
+
+
+
+static void _after_launch_taskmgr(int pid)
+{
+ if(0 < pid) {
+ if(dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_DEFAULT) < 0){
+ _E("failed to send oom dbus signal");
+ }
+ }
+}
+
+
+
+static Eina_Bool _launch_taskmgr_cb(void* data)
+{
+ int val = -1;
+
+ _D("Launch TASKMGR");
+
+ key_info.home_long_press_timer = NULL;
+
+ if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) {
+ _E("Cannot get VCONFKEY for lock state");
+ } else if (VCONFKEY_IDLE_LOCK == val) {
+ _E("lock state, ignore home key long press..!!");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ process_mgr_must_launch(APPID_TASKMGR, NULL, NULL, NULL, _after_launch_taskmgr);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _release_multimedia_key(const char *value)
+{
+ ret_if(NULL == value);
+ _D("Multimedia key is released with %s", value);
+ process_mgr_must_launch(APPID_MUSIC_PLAYER, "multimedia_key", value, NULL, NULL);
+}
+
+
+
+static Eina_Bool _launch_by_home_key(void *data)
+{
+ int ret = 0;
+
+ if (status_passive_get()->idle_lock_state > VCONFKEY_IDLE_UNLOCK) {
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ ret = home_mgr_open_home(NULL);
+ if(ret > 0) {
+ dbus_util_send_home_raise_signal();
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static Eina_Bool _home_multi_press_timer_cb(void *data)
+{
+ _W("homekey count[%d]", key_info.homekey_count);
+
+ key_info.home_multi_press_timer = NULL;
+
+ if(0 == key_info.homekey_count % 2) {
+ key_info.homekey_count = 0;
+ return ECORE_CALLBACK_CANCEL;
+ } else if(key_info.homekey_count >= 3) {
+ key_info.homekey_count = 0;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ /* Single homekey operation */
+ key_info.homekey_count = 0;
+ _launch_by_home_key(data);
+
+ return ECORE_CALLBACK_CANCEL;
+
+}
+
+
+
+#define SERVICE_OPERATION_POPUP_SEARCH "http://samsung.com/appcontrol/operation/search"
+#define SEARCH_PKG_NAME "org.tizen.sfinder"
+static int _launch_search(void)
+{
+ app_control_h app_control;
+ int ret = APP_CONTROL_ERROR_NONE;
+
+ app_control_create(&app_control);
+ app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
+ app_control_set_app_id(app_control, SEARCH_PKG_NAME);
+
+ ret = app_control_send_launch_request(app_control, NULL, NULL);
+
+ if(ret != APP_CONTROL_ERROR_NONE) {
+ _E("Cannot launch search!! err[%d]", ret);
+ }
+
+ app_control_destroy(app_control);
+ return ret;
+}
+
+
+
+static void _cancel_key_events(void)
+{
+ key_info.homekey_count = 0;
+
+ if (key_info.home_long_press_timer) {
+ ecore_timer_del(key_info.home_long_press_timer);
+ key_info.home_long_press_timer = NULL;
+ }
+
+ if(key_info.home_multi_press_timer) {
+ ecore_timer_del(key_info.home_multi_press_timer);
+ key_info.home_multi_press_timer = NULL;
+ }
+}
+
+
+
+#if 0
+static Eina_Bool _key_release_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Up *ev = event;
+
+ retv_if(!ev, ECORE_CALLBACK_RENEW);
+ retv_if(!ev->keyname, ECORE_CALLBACK_RENEW);
+
+ _D("_key_release_cb : %s Released", ev->keyname);
+
+ /* Priority 1 : Cancel event */
+ if (!strcmp(ev->keyname, KEY_CANCEL)) {
+ _D("CANCEL Key is released");
+ key_info.cancel = EINA_FALSE;
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if (EINA_TRUE == key_info.cancel) {
+ _D("CANCEL is on");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ /* Priority 2 : Execute before checking the lock status */
+ if (!strcmp(ev->keyname, KEY_MEDIA)) {
+ _release_multimedia_key("KEY_PLAYCD");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ /* Priority 3 : Check the lock status */
+ if ((status_passive_get()->idle_lock_state == VCONFKEY_IDLE_LOCK)
+ && (status_active_get()->setappl_screen_lock_type_int > SETTING_SCREEN_LOCK_TYPE_NONE)) {
+ if (!strcmp(ev->keyname, KEY_BACK)) {
+ _D("Back key is released");
+ lock_pwd_util_back_key_relased();
+ } else {
+ _D("phone lock state, ignore home key.");
+ }
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ /* Priority 4 : These keys are only activated after checking the lock state */
+ 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)) {
+ _W("Home Key is released");
+
+ syspopup_destroy_all();
+
+ if(key_info.home_multi_press_timer) {
+ _D("delete homekey timer");
+ ecore_timer_del(key_info.home_multi_press_timer);
+ key_info.home_multi_press_timer = NULL;
+ }
+
+ if (key_info.home_long_press_timer) {
+ ecore_timer_del(key_info.home_long_press_timer);
+ key_info.home_long_press_timer = NULL;
+ } else {
+ key_info.homekey_count = 0;
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ key_info.home_multi_press_timer = ecore_timer_add(HOMEKEY_TIMER_SEC, _home_multi_press_timer_cb, NULL);
+ if (!key_info.home_multi_press_timer) {
+ _E("Critical! cannot add a timer for home multi press");
+ }
+ return ECORE_CALLBACK_RENEW;
+ } else if (!strcmp(ev->keyname, KEY_PAUSE)) {
+ } else if (!strcmp(ev->keyname, KEY_APPS)) {
+ _D("App tray key is released");
+ } else if (!strcmp(ev->keyname, KEY_TASKSWITCH)) {
+ _D("Task switch key is released");
+ _launch_taskmgr_cb(NULL);
+ } else if (!strcmp(ev->keyname, KEY_WEBPAGE)) {
+ _D("Web page key is released");
+ process_mgr_must_open(APPID_BROWSER, NULL, NULL);
+ } else if (!strcmp(ev->keyname, KEY_MAIL)) {
+ _D("Mail key is released");
+ process_mgr_must_open(APPID_EMAIL, NULL, NULL);
+ } else if (!strcmp(ev->keyname, KEY_CONNECT)) {
+ _D("Connect key is released");
+ process_mgr_must_open(APPID_DIALER, NULL, NULL);
+ } else if (!strcmp(ev->keyname, KEY_SEARCH)) {
+ _D("Search key is released");
+ if (_launch_search() < 0) {
+ _E("Failed to launch the search");
+ }
+ } else if (!strcmp(ev->keyname, KEY_VOICE)) {
+ _D("Voice key is released");
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+#endif
+
+
+
+#if 0
+static Eina_Bool _key_press_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Down *ev = event;
+
+ retv_if(!ev, ECORE_CALLBACK_RENEW);
+ retv_if(!ev->keyname, ECORE_CALLBACK_RENEW);
+
+ _D("_key_press_cb : %s Pressed", ev->keyname);
+
+ /* Priority 1 : Cancel */
+ /* every reserved events have to be canceld when cancel key is pressed */
+ if (!strcmp(ev->keyname, KEY_CANCEL)) {
+ _D("Cancel button is pressed");
+ key_info.cancel = EINA_TRUE;
+ _cancel_key_events();
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if (EINA_TRUE == key_info.cancel) {
+ _D("CANCEL is on");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ /* Priority 2 : Check the lock status */
+ if ((status_passive_get()->idle_lock_state == VCONFKEY_IDLE_LOCK)
+ && (status_active_get()->setappl_screen_lock_type_int > SETTING_SCREEN_LOCK_TYPE_NONE)) {
+ _D("phone lock state, ignore key events.");
+ _cancel_key_events();
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ /* Priority 3 : other keys */
+ if (!strcmp(ev->keyname, KEY_SEND)) {
+ _D("Launch calllog");
+ process_mgr_must_open(APPID_CALLLOG, NULL, NULL);
+ } else if(!strcmp(ev->keyname, KEY_CONFIG)) {
+ _D("Launch camera");
+ process_mgr_must_open(APPID_CAMERA, NULL, NULL);
+ } else if (!strcmp(ev->keyname, KEY_HOME)) {
+ _W("Home Key is pressed");
+ if (key_info.home_long_press_timer) {
+ ecore_timer_del(key_info.home_long_press_timer);
+ key_info.home_long_press_timer = NULL;
+ }
+
+ key_info.homekey_count++;
+ _W("homekey count : %d", key_info.homekey_count);
+
+ if(key_info.home_multi_press_timer) {
+ ecore_timer_del(key_info.home_multi_press_timer);
+ key_info.home_multi_press_timer = NULL;
+ _D("delete homekey timer");
+ }
+
+ _D("create long press timer");
+ key_info.home_long_press_timer = ecore_timer_add(LONG_PRESS_TIMER_SEC, _launch_taskmgr_cb, NULL);
+ if (!key_info.home_long_press_timer) {
+ _E("Failed to add timer for long press detection");
+ }
+ } else if (!strcmp(ev->keyname, KEY_MEDIA)) {
+ _D("Media key is pressed");
+ } else if (!strcmp(ev->keyname, KEY_APPS)) {
+ _D("App tray key is pressed");
+ } else if (!strcmp(ev->keyname, KEY_TASKSWITCH)) {
+ _D("Task switch key is pressed");
+ } else if (!strcmp(ev->keyname, KEY_WEBPAGE)) {
+ _D("Web page key is pressed");
+ } else if (!strcmp(ev->keyname, KEY_MAIL)) {
+ _D("Mail key is pressed");
+ } else if (!strcmp(ev->keyname, KEY_SEARCH)) {
+ _D("Search key is pressed");
+ } else if (!strcmp(ev->keyname, KEY_VOICE)) {
+ _D("Voice key is pressed");
+ } else if (!strcmp(ev->keyname, KEY_CONNECT)) {
+ _D("Connect key is pressed");
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+#endif
+
+
+
+#if 0
+void _media_key_event_cb(media_key_e key, media_key_event_e status, void *user_data)
+{
+ _D("MEDIA KEY EVENT : %d", key);
+ if (MEDIA_KEY_STATUS_PRESSED == status) return;
+
+ switch (key) {
+ case MEDIA_KEY_PAUSE:
+ _release_multimedia_key("KEY_PAUSECD");
+ break;
+ case MEDIA_KEY_PLAY:
+ _release_multimedia_key("KEY_PLAYCD");
+ break;
+ case MEDIA_KEY_PLAYPAUSE:
+ _release_multimedia_key("KEY_PLAYPAUSECD");
+ break;
+ default:
+ _E("cannot reach here, key[%d]", key);
+ break;
+ }
+}
+#endif
+
+
+
+void hw_key_create_window(void)
+{
+ int ret;
+#if 0 //build error
+ Ecore_X_Atom atomNotiWindow;
+ Ecore_X_Window keyrouter_notiwindow;
+
+ 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);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_APPS, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_TASKSWITCH, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_WEBPAGE, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_MAIL, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_SEARCH, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOICE, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_CONNECT, SHARED_GRAB);
+ utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_POWER, SHARED_GRAB);
+
+ key_info.key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL);
+ if (!key_info.key_up)
+ _E("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)
+ _E("Failed to register a key down event handler");
+
+ /* Get notifwindow */
+ atomNotiWindow = ecore_x_atom_get(STR_ATOM_KEYROUTER_NOTIWINDOW);
+ ret = ecore_x_window_prop_window_get(ecore_x_window_root_first_get(), atomNotiWindow, &keyrouter_notiwindow, 1);
+ if (ret > 0) {
+ _D("Succeed to get keyrouter notiwindow ! ret = %d (win=0x%x)\n"
+ , ret, keyrouter_notiwindow);
+ ecore_x_window_sniff(keyrouter_notiwindow);
+ key_info.keyrouter_notiwindow = keyrouter_notiwindow;
+ } else {
+ _E("Failed to get keyrouter notiwindow! ret = %d, atomNotiWindow = 0x%x, keyrouter_notiwindow = 0x%x"
+ , ret, atomNotiWindow, keyrouter_notiwindow);
+ }
+
+ media_key_reserve(_media_key_event_cb, NULL);
+#endif
+}
+
+
+
+void hw_key_destroy_window(void)
+{
+#if 0 //build error
+ 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);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_APPS);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_TASKSWITCH);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_WEBPAGE);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_MAIL);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_SEARCH);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOICE);
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_CONNECT);
+
+ 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();
+#endif
+}
+
+
+
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vconf.h>
+#include <vconf-keys.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <feedback.h>
+#include <time.h>
+#include <dd-deviced.h>
+#include <dd-display.h>
+#include <aul.h>
+#include <system_settings.h>
+#include <efl_assist.h>
+
+#include "lock_mgr.h"
+#include "package_mgr.h"
+#include "process_mgr.h"
+#include "hw_key.h"
+#include "dbus_util.h"
+#include "util.h"
+#include "status.h"
+#include "lock_pwd_util.h"
+#include "lock_pwd_simple.h"
+#include "lock_pwd_control_panel.h"
+
+#define PASSWORD_LOCK_PROGRESS "/tmp/.passwordlock"
+
+static struct {
+ int checkfd;
+ alarm_id_t alarm_id; /* -1 : None, others : set alarm */
+ Eina_Bool is_alarm; /* EINA_TRUE : can use alarm EINA_FALSE : cannot use */
+
+ int old_lock_type;
+ char *lock_appid;
+ int lock_pid;
+ int lcd_state;
+
+ lockw_data *lockw;
+} s_lock_mgr = {
+ .checkfd = 0,
+ .alarm_id = -1,
+ .is_alarm = EINA_FALSE,
+
+ .old_lock_type = 0,
+ .lock_appid = NULL,
+ .lock_pid = -1,
+ .lcd_state = -1,
+
+ .lockw = NULL,
+};
+
+
+
+int lock_mgr_lcd_state_get(void)
+{
+ return s_lock_mgr.lcd_state;
+}
+
+
+
+int lock_mgr_lock_pid_get(void)
+{
+ return s_lock_mgr.lock_pid;
+}
+
+
+
+static int _alarm_del(alarm_id_t id, void * user_param)
+{
+ int ret = ALARMMGR_RESULT_SUCCESS;
+
+ _D("delete alarm id : %d", id);
+
+ ret = alarmmgr_remove_alarm(id);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("Failed to remove alarm(%d)", ret );
+ }
+
+ return 0;
+}
+
+
+
+static void _alarm_unset(void)
+{
+ int ret = ALARMMGR_RESULT_SUCCESS;
+
+ ret = alarmmgr_enum_alarm_ids(_alarm_del, NULL);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("Failed to get list of alarm ids");
+ }
+}
+
+
+
+static void _alarm_lockscreen_launch(alarm_id_t alarm_id, void *data)
+{
+ int ret = ALARMMGR_RESULT_SUCCESS;
+
+ _D("alarm id : %d", alarm_id);
+
+ /* launch lockscreen */
+ lock_mgr_lockscreen_launch();
+
+ if (alarm_id != -1) {
+ if (alarm_id != s_lock_mgr.alarm_id) {
+ _E("alarm ids are different callback->id(%d), s_lock_mgr.alarm_id(%d)", alarm_id, s_lock_mgr.alarm_id);
+ /* delete all registering alarm*/
+ _alarm_unset();
+ s_lock_mgr.alarm_id = -1;
+ } else {
+ ret = alarmmgr_remove_alarm(alarm_id);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("Failed to remove alaram(%d)", ret);
+ /* delete all registering alarm*/
+ _alarm_unset();
+ }
+ s_lock_mgr.alarm_id = -1;
+ }
+ }
+}
+
+
+
+static Eina_Bool _alarm_set(int sec)
+{
+ time_t current_time;
+ struct tm current_tm;
+ alarm_entry_t *alarm_info;
+ alarm_id_t alarm_id;
+ alarm_date_t alarm_time;
+ int ret = ALARMMGR_RESULT_SUCCESS;
+
+ /* delete before registering alarm ids */
+ if (s_lock_mgr.alarm_id != -1){
+ _E("ad->alarm_id(%d) deleted", s_lock_mgr.alarm_id);
+ ret = alarmmgr_remove_alarm(s_lock_mgr.alarm_id);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("Failed to remove alarm(%d) : %d", ret, s_lock_mgr.alarm_id);
+ _alarm_unset();
+ }
+ s_lock_mgr.alarm_id = -1;
+ }
+
+ /* set alarm after sec */
+ time(¤t_time);
+
+ _D("%s, after %d SEC.s alarm set", ctime(¤t_time), sec);
+ localtime_r(¤t_time, ¤t_tm);
+
+ alarm_info = alarmmgr_create_alarm();
+ retv_if(!alarm_info, EINA_FALSE);
+
+ alarm_time.year = 0;
+ alarm_time.month = 0;
+ alarm_time.day = 0;
+ alarm_time.hour = current_tm.tm_hour;
+ alarm_time.min = current_tm.tm_min;
+ alarm_time.sec = current_tm.tm_sec + sec;
+
+ alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0);
+ alarmmgr_set_time(alarm_info, alarm_time);
+ alarmmgr_set_type(alarm_info, ALARM_TYPE_VOLATILE);
+
+ ret = alarmmgr_add_alarm_with_localtime(alarm_info, NULL, &alarm_id);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("Failed to add alarm with localtime(%d)", ret);
+ alarmmgr_free_alarm(alarm_info) ;
+ return EINA_FALSE;
+ }
+
+ _D("alarm id(%d) is set", alarm_id);
+ s_lock_mgr.alarm_id = alarm_id;
+ alarmmgr_free_alarm(alarm_info) ;
+
+ return EINA_TRUE;
+}
+
+
+
+static Eina_Bool _alarm_init(void)
+{
+ int ret = 0;
+
+ /* alarm id initialize */
+ s_lock_mgr.alarm_id = -1;
+
+ ret = alarmmgr_init(PACKAGE_NAME);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("Failed to initialize alarmmgr(%d)", ret);
+ return EINA_FALSE;
+ }
+
+ ret = alarmmgr_set_cb((alarm_cb_t)_alarm_lockscreen_launch, NULL);
+ if (ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("Failed to set cb func(%d)", ret);
+ return EINA_FALSE;
+ }
+
+ _D("alarm init success");
+
+ return EINA_TRUE;
+}
+
+
+
+
+void lock_mgr_sound_play(lock_sound_type_e type)
+{
+ int val = status_passive_get()->setappl_sound_lock_bool;
+ ret_if(!val);
+
+ switch(type) {
+ case LOCK_SOUND_LOCK:
+ feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_LOCK);
+ break;
+ case LOCK_SOUND_UNLOCK:
+ feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_UNLOCK);
+ break;
+ case LOCK_SOUND_BTN_KEY:
+ feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_SIP);
+ break;
+ case LOCK_SOUND_TAP:
+ feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_TOUCH_TAP);
+ break;
+ default:
+ break;
+ }
+}
+
+
+
+void lock_mgr_idle_lock_state_set(int lock_state)
+{
+ _D("lock state : %d", lock_state);
+
+ if (lock_state < VCONFKEY_IDLE_UNLOCK) {
+ _E("Can't set lock_state : %d out of range", lock_state);
+ } else {
+ vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, lock_state);
+ }
+}
+
+
+
+static void _after_launch_lock(int pid)
+{
+ int idle_lock_state = 0;
+
+ if (dbus_util_send_oomadj(pid, OOM_ADJ_VALUE_DEFAULT) < 0) {
+ _E("cannot send oomadj for pid[%d]", pid);
+ }
+ process_mgr_set_lock_priority(pid);
+ display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN);
+ s_lock_mgr.lock_pid = pid;
+
+ idle_lock_state = status_passive_get()->idle_lock_state;
+ if (!idle_lock_state) {
+ lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_LOCK);
+ lock_mgr_sound_play(LOCK_SOUND_LOCK);
+ }
+}
+
+
+
+static int _lock_changed_cb(const char *appid, const char *key, const char *value, void *cfn, void *afn)
+{
+ if (!strncmp(appid, status_passive_get()->setappl_3rd_lock_pkg_name_str, strlen(appid))) {
+ _E("We cannot do anything anymore.");
+ } else {
+ if (vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, appid) != 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
+ return -1;
+ } else {
+ if (s_lock_mgr.lock_appid) free(s_lock_mgr.lock_appid);
+ s_lock_mgr.lock_appid = strdup(appid);
+ retv_if(!s_lock_mgr.lock_appid, -1);
+ return 0;
+ }
+ }
+ _E("cannot change lock");
+ return -1;
+}
+
+
+
+static void _other_lockscreen_unlock(void)
+{
+ _D("unlock other lock screen");
+
+ window_mgr_unregister_event(s_lock_mgr.lockw);
+ window_mgr_fini(s_lock_mgr.lockw);
+ s_lock_mgr.lockw = NULL;
+}
+
+
+
+static Eina_Bool _lock_create_cb(void *data, int type, void *event)
+{
+ _D("lockw(%p), lock_pid(%d)", s_lock_mgr.lockw, s_lock_mgr.lock_pid);
+
+ if (window_mgr_set_effect(s_lock_mgr.lockw, s_lock_mgr.lock_pid, event) == EINA_TRUE) {
+ //FIXME sometimes show cb is not called.
+ if (window_mgr_set_prop(s_lock_mgr.lockw, s_lock_mgr.lock_pid, event) == EINA_FALSE) {
+ _E("window is not matched..!!");
+ }
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+
+
+static Eina_Bool _lock_show_cb(void *data, int type, void *event)
+{
+ _D("lockw(%p), lock_pid(%d)", s_lock_mgr.lockw, s_lock_mgr.lock_pid);
+
+ if (window_mgr_set_prop(s_lock_mgr.lockw, s_lock_mgr.lock_pid, event)) {
+ int lock_type = status_active_get()->setappl_screen_lock_type_int;
+ _D("lock type : %d", lock_type);
+
+ window_mgr_set_scroll_prop(s_lock_mgr.lockw, lock_type);
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static Eina_Bool _lock_hide_cb(void *data, int type, void *event)
+{
+ int pwd_win_visible = lock_pwd_util_win_visible_get();
+ int lock_type = status_active_get()->setappl_screen_lock_type_int;
+ _D("pwd win visible(%d), lock type(%d)", pwd_win_visible, lock_type);
+
+
+ if (!pwd_win_visible) {
+ lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_UNLOCK);
+ lock_mgr_sound_play(LOCK_SOUND_UNLOCK);
+ s_lock_mgr.lock_pid = 0;
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_OTHER) {
+ _other_lockscreen_unlock();
+ }
+ }
+
+ window_mgr_unregister_event(s_lock_mgr.lockw);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _lcd_off_by_timeout(void)
+{
+ int idle_lock_state = 0;
+ int accessibility_lock_time = 0;
+
+ idle_lock_state = status_passive_get()->idle_lock_state;
+ if (idle_lock_state == VCONFKEY_IDLE_LOCK) {
+ _D("VCONFKEY is set(not need to set alarm), lock_pid : %d", s_lock_mgr.lock_pid);
+ return;
+ }
+
+ if (s_lock_mgr.alarm_id != -1) {
+ _E("Alarm is set yet (alarm_id = %d) : do nothing", s_lock_mgr.alarm_id);
+ return;
+ }
+
+ accessibility_lock_time = status_passive_get()->setappl_accessibility_lock_time_int;
+ _D("accessibility lock time : %d", accessibility_lock_time);
+ if (accessibility_lock_time == 0) {
+ _alarm_lockscreen_launch(-1, NULL);
+ return;
+ } else {
+ if (s_lock_mgr.is_alarm) {
+ _D("set alarm %d sec", accessibility_lock_time);
+ if (_alarm_set(accessibility_lock_time) != EINA_TRUE) {
+ _E("Failed to set alarm");
+ _alarm_lockscreen_launch(-1, NULL);
+ }
+ } else {
+ _E("is_alarm is EINA_FALSE");
+ _alarm_lockscreen_launch(-1, NULL);
+ }
+ }
+}
+
+
+
+static void _on_lcd_changed_receive(void *data, DBusMessage *msg)
+{
+ int lcd_on = 0;
+ int lcd_off = 0;
+
+ _D("LCD signal is received");
+
+ lcd_on = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON);
+ lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF);
+
+ if (lcd_on) {
+ _W("LCD on");
+ s_lock_mgr.lcd_state = LCD_STATE_ON;
+
+ /* delete all alarm registering */
+ _D("delete alarm : id(%d)", s_lock_mgr.alarm_id);
+ _alarm_unset();
+ s_lock_mgr.alarm_id = -1;
+
+ if (lock_pwd_util_win_visible_get()) {
+ _D("Password lock is ON");
+ lock_pwd_control_panel_resume();
+ } else {
+ _D("Password lock is OFF");
+ }
+ } else if (lcd_off) {
+ s_lock_mgr.lcd_state = LCD_STATE_OFF;
+ char *lcd_off_source = dbus_util_msg_arg_get_str(msg);
+ ret_if(!lcd_off_source);
+
+ int idle_lock_state = status_passive_get()->idle_lock_state;
+ int lock_type = status_active_get()->setappl_screen_lock_type_int;
+ _D("idle_lock_state(%d), lock type(%d)", idle_lock_state, lock_type);
+
+ if (lock_pwd_util_win_visible_get()) {
+ _D("Password lock is ON");
+ lock_pwd_control_panel_pause();
+ if (!lock_pwd_simple_is_blocked_get()) {
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE) {
+ display_lock_state(LCD_OFF, STAY_CUR_STATE, 0);
+ dbus_util_send_lock_PmQos_signal();
+ }
+ lock_pwd_util_view_init();
+ }
+ } else {
+ _D("Password lock is OFF");
+ if (!strncmp(lcd_off_source, "powerkey", strlen(lcd_off_source))) {
+ _D("LCD off by Powerkey");
+ if (idle_lock_state == VCONFKEY_IDLE_UNLOCK) {
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE) {
+ display_lock_state(LCD_OFF, STAY_CUR_STATE, 0);
+ dbus_util_send_lock_PmQos_signal();
+ }
+ lock_mgr_lockscreen_launch();
+ }
+ } else if(!strncmp(lcd_off_source, "timeout", strlen(lcd_off_source))) {
+ _D("LCD off by timeout");
+ _lcd_off_by_timeout();
+ } else {
+ _E("Dbus message is unknow : %s", lcd_off_source);
+ }
+ }
+
+ free(lcd_off_source);
+ } else {
+ _E("%s dbus_message_is_signal error", DEVICED_INTERFACE_DISPLAY);
+ }
+}
+
+
+
+Eina_Bool lock_mgr_lockscreen_launch(void)
+{
+ int lock_type = 0;
+ Evas_Object *lock_pwd_win = NULL;
+
+ lock_type = status_active_get()->setappl_screen_lock_type_int;
+ _D("lock type : %d", lock_type);
+
+ //PM LOCK - don't go to sleep
+ display_lock_state(LCD_OFF, STAY_CUR_STATE, 0);
+
+ /* reset window mgr before start win mgr */
+ window_mgr_unregister_event(s_lock_mgr.lockw);
+ window_mgr_register_event(NULL, s_lock_mgr.lockw, _lock_create_cb, _lock_show_cb, _lock_hide_cb);
+
+ switch (lock_type) {
+ case SETTING_SCREEN_LOCK_TYPE_NONE:
+ _E("Lockscreen type is NONE");
+ return EINA_TRUE;
+ case SETTING_SCREEN_LOCK_TYPE_SWIPE:
+ process_mgr_must_launch(LOCK_MGR_DEFAULT_PKG_NAME, NULL, NULL, _lock_changed_cb, _after_launch_lock);
+ goto_if(s_lock_mgr.lock_pid < 0, ERROR);
+ break;
+ case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD:
+ case SETTING_SCREEN_LOCK_TYPE_PASSWORD:
+ process_mgr_must_launch(LOCK_MGR_DEFAULT_PKG_NAME, NULL, NULL, _lock_changed_cb, _after_launch_lock);
+ goto_if(s_lock_mgr.lock_pid < 0, ERROR);
+
+ if (dbus_util_send_oomadj(s_lock_mgr.lock_pid, OOM_ADJ_VALUE_DEFAULT) < 0){
+ _E("Failed to send oom dbus signal");
+ }
+
+ process_mgr_set_lock_priority(s_lock_mgr.lock_pid);
+ display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN);
+
+ /* password lockscreen */
+ lock_pwd_win = lock_pwd_util_win_get();
+ if (!lock_pwd_win) {
+ lock_pwd_util_create(EINA_TRUE);
+ } else {
+ lock_pwd_util_win_show();
+ }
+ break;
+ case SETTING_SCREEN_LOCK_TYPE_OTHER:
+ if (!package_mgr_exist_app(status_passive_get()->setappl_3rd_lock_pkg_name_str)) {
+ process_mgr_must_launch(status_passive_get()->setappl_3rd_lock_pkg_name_str, NULL, NULL, _lock_changed_cb, _after_launch_lock);
+ } else {
+ _D("launch default lockscreen");
+ process_mgr_must_launch(LOCK_MGR_DEFAULT_PKG_NAME, NULL, NULL, _lock_changed_cb, _after_launch_lock);
+ }
+ goto_if(s_lock_mgr.lock_pid < 0, ERROR);
+
+ break;
+ default:
+ _E("type error(%d)", lock_type);
+ goto ERROR;
+ }
+
+ _W("lock_pid : %d", s_lock_mgr.lock_pid);
+
+ return EINA_TRUE;
+
+ERROR:
+ _E("Failed to launch lockscreen");
+ display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN);
+
+ return EINA_FALSE;
+}
+
+
+
+static void _check_ongoing(bool ongoing)
+{
+ if (ongoing) {
+ /* check previous process */
+ if (s_lock_mgr.checkfd) {
+ _E("checkfd fail");
+ return;
+ }
+
+ if (access(PASSWORD_LOCK_PROGRESS, F_OK) == 0) {
+ _E("file(%s) is exist", PASSWORD_LOCK_PROGRESS);
+ return;
+ }
+
+ /* make tmp file */
+ s_lock_mgr.checkfd = creat(PASSWORD_LOCK_PROGRESS, 0640);
+
+ if (s_lock_mgr.checkfd < 0) {
+ _E("Failed to make %s file", PASSWORD_LOCK_PROGRESS);
+ s_lock_mgr.checkfd = 0;
+ }
+
+ _W("make %s file", PASSWORD_LOCK_PROGRESS);
+ s_lock_mgr.checkfd = 1;
+ } else {
+ if (!s_lock_mgr.checkfd) {
+ _E("checkfd is NULL");
+ return;
+ }
+
+ if (unlink(PASSWORD_LOCK_PROGRESS) < 0) {
+ _E("Failed to remove %s file", PASSWORD_LOCK_PROGRESS);
+ }
+
+ close(s_lock_mgr.checkfd);
+ s_lock_mgr.checkfd = 0;
+ _W("delete %s file", PASSWORD_LOCK_PROGRESS);
+ }
+}
+
+
+
+static void _lock_daemon_init(void)
+{
+ s_lock_mgr.lock_appid = strdup(status_passive_get()->setappl_3rd_lock_pkg_name_str);
+ if (!s_lock_mgr.lock_appid) {
+ s_lock_mgr.lock_appid = strdup(LOCK_MGR_DEFAULT_PKG_NAME);
+ }
+
+ if (s_lock_mgr.lock_appid && !package_mgr_exist_app(s_lock_mgr.lock_appid)) {
+ _SECURE_E("%s is not exist, default lock screen pkg name is set to %s", s_lock_mgr.lock_appid, LOCK_MGR_DEFAULT_PKG_NAME);
+ free(s_lock_mgr.lock_appid);
+ s_lock_mgr.lock_appid = strdup(LOCK_MGR_DEFAULT_PKG_NAME);
+ if (vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, LOCK_MGR_DEFAULT_PKG_NAME) != 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
+ }
+ }
+
+ _SECURE_D("default lock screen pkg name is %s", s_lock_mgr.lock_appid);
+
+ /* init alarm manager */
+ s_lock_mgr.is_alarm = _alarm_init();
+
+ /* register lcd changed cb */
+ dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL);
+
+ /* Create internal 1x1 window */
+ s_lock_mgr.lockw = window_mgr_init();
+}
+
+
+
+static int _lock_type_changed_cb(status_active_key_e key, void *data)
+{
+ int lock_type = status_active_get()->setappl_screen_lock_type_int;
+ retv_if(lock_type == s_lock_mgr.old_lock_type, 1);
+
+ _D("lock type is changed : %d -> %d", s_lock_mgr.old_lock_type, lock_type);
+
+ if (s_lock_mgr.old_lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD ||
+ s_lock_mgr.old_lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
+ _D("delete password lockscreen layout");
+ lock_pwd_util_del();
+ }
+
+ switch (lock_type) {
+ case SETTING_SCREEN_LOCK_TYPE_NONE:
+ break;
+ case SETTING_SCREEN_LOCK_TYPE_SWIPE:
+ break;
+ case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD:
+ case SETTING_SCREEN_LOCK_TYPE_PASSWORD:
+ lock_pwd_util_create(EINA_FALSE);
+ break;
+ case SETTING_SCREEN_LOCK_TYPE_OTHER:
+ break;
+ default:
+ break;
+ }
+
+ s_lock_mgr.old_lock_type = lock_type;
+
+ return 1;
+}
+
+
+int lock_mgr_daemon_start(void)
+{
+ int lock_type = 0;
+ int ret = 0;
+
+ _lock_daemon_init();
+
+ lock_type = status_active_get()->setappl_screen_lock_type_int;
+ _D("lock type : %d", lock_type);
+
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
+ if (s_lock_mgr.checkfd) {
+ _check_ongoing(EINA_FALSE);
+ } else {
+ _check_ongoing(EINA_TRUE);
+ }
+ }
+
+ ret = lock_mgr_lockscreen_launch();
+ _D("ret : %d", ret);
+
+ status_active_register_cb(STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _lock_type_changed_cb, NULL);
+
+ if (feedback_initialize() != FEEDBACK_ERROR_NONE) {
+ _E("Failed to initialize feedback");
+ }
+
+ return ret;
+}
+
+
+
+void lock_mgr_daemon_end(void)
+{
+ if (s_lock_mgr.lock_appid) {
+ free(s_lock_mgr.lock_appid);
+ s_lock_mgr.lock_appid = NULL;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Elementary.h>
+#include <Ecore.h>
+
+#include "lock_mgr.h"
+#include "util.h"
+#include "lock_pwd_util.h"
+#include "lock_pwd_complex.h"
+#include "lock_pwd_control_panel.h"
+
+#define IME_RESIZED 1
+#define IME_DOWN 2
+
+static struct _s_lock_pwd_complex {
+ Evas_Object *pwd_complex_layout;
+ Evas_Object *pwd_complex_entry;
+
+ Eina_Bool is_blocked;
+ Ecore_Timer *timer_pin;
+ int pin_time_remain;
+} s_lock_pwd_complex = {
+ .pwd_complex_layout = NULL,
+ .pwd_complex_entry = NULL,
+
+ .is_blocked = EINA_FALSE,
+ .timer_pin = NULL,
+ .pin_time_remain = PASSWORD_BLOCK_SECONDS,
+};
+
+
+
+
+Eina_Bool lock_pwd_complex_is_blocked_get(void)
+{
+ return s_lock_pwd_complex.is_blocked;
+}
+
+static void _pwd_complex_layout_title_set(const char *title)
+{
+ ret_if(!s_lock_pwd_complex.pwd_complex_layout);
+ ret_if(!title);
+
+ elm_object_part_text_set(s_lock_pwd_complex.pwd_complex_layout, "title", title);
+}
+
+
+
+void lock_pwd_complex_entry_clear(void)
+{
+ ret_if(!s_lock_pwd_complex.pwd_complex_entry);
+
+ elm_entry_entry_set(s_lock_pwd_complex.pwd_complex_entry, "");
+}
+
+
+
+static Eina_Bool _pwd_complex_entry_clear(void *data)
+{
+ lock_pwd_complex_entry_clear();
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _pwd_complex_lock_time_init(void)
+{
+ if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, "") < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR);
+ }
+}
+
+
+
+static void _pwd_complex_lock_time_save(void)
+{
+ time_t cur_time = time(NULL);
+ char buf[64] = { 0, };
+ snprintf(buf, sizeof(buf), "%ld", cur_time);
+ if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, buf) < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR);
+ }
+}
+
+
+
+static void _pwd_complex_event_correct(lock_pwd_event_e event)
+{
+ _D("%s", __func__);
+
+ lock_pwd_util_win_hide();
+ lock_pwd_complex_entry_clear();
+ _pwd_complex_layout_title_set(_("IDS_COM_BODY_ENTER_PIN"));
+
+ lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_UNLOCK);
+ lock_mgr_sound_play(LOCK_SOUND_UNLOCK);
+}
+
+
+
+static void _pwd_complex_event_incorrect(lock_pwd_event_e event)
+{
+ char temp_str[BUF_SIZE_256] = { 0, };
+ char temp_left[BUF_SIZE_256] = { 0, };
+ int remain_attempt = 0;
+
+ remain_attempt = lock_pwd_verification_remain_attempt_get();
+ _D("remain_attempt(%d)", remain_attempt);
+
+ if (remain_attempt == 1) {
+ strncpy(temp_left, _("IDS_IDLE_BODY_1_ATTEMPT_LEFT"), sizeof(temp_left));
+ temp_left[sizeof(temp_left) - 1] = '\0';
+ } else {
+ snprintf(temp_left, sizeof(temp_left), _("IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"), remain_attempt);
+ }
+ snprintf(temp_str, sizeof(temp_str), "%s<br>%s", _("IDS_COM_BODY_INCORRECT_PIN"), temp_left);
+ _pwd_complex_layout_title_set(temp_str);
+
+ ecore_timer_add(0.1, _pwd_complex_entry_clear, NULL);
+
+ lock_pwd_verification_popup_create(event);
+}
+
+
+
+static Eina_Bool _wrong_pwd_wait_timer_cb(void *data)
+{
+ char try_again_buf[BUF_SIZE_256] = { 0, };
+ char incorrect_pass_buf[BUF_SIZE_256] = { 0, };
+
+ retv_if(!s_lock_pwd_complex.pwd_complex_layout, ECORE_CALLBACK_CANCEL);
+
+ snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), s_lock_pwd_complex.pin_time_remain);
+ snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s<br>%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf);
+ _pwd_complex_layout_title_set(incorrect_pass_buf);
+
+ if (s_lock_pwd_complex.pin_time_remain == PASSWORD_BLOCK_SECONDS ||
+ s_lock_pwd_complex.pin_time_remain > 0) {
+ s_lock_pwd_complex.pin_time_remain--;
+ return ECORE_CALLBACK_RENEW;
+ } else {
+ lock_pwd_complex_view_init();
+
+ int lcd_state = lock_mgr_lcd_state_get();
+ if (lcd_state == LCD_STATE_OFF) {
+ lock_mgr_lockscreen_launch();
+ }
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _pwd_complex_event_input_block(lock_pwd_event_e event)
+{
+ _D("%s", __func__);
+
+ int block_sec = PASSWORD_BLOCK_SECONDS;
+ char try_again_buf[BUF_SIZE_256] = { 0, };
+ char incorrect_pass_buf[BUF_SIZE_256] = { 0, };
+
+ ret_if(!s_lock_pwd_complex.pwd_complex_layout);
+
+ _pwd_complex_lock_time_save();
+
+ snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), block_sec);
+ snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s<br>%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf);
+ _pwd_complex_layout_title_set(incorrect_pass_buf);
+
+ s_lock_pwd_complex.is_blocked = EINA_TRUE;
+
+ if (s_lock_pwd_complex.timer_pin) {
+ ecore_timer_del(s_lock_pwd_complex.timer_pin);
+ s_lock_pwd_complex.timer_pin = NULL;
+ }
+
+ s_lock_pwd_complex.timer_pin = ecore_timer_add(1.0, _wrong_pwd_wait_timer_cb, NULL);
+
+ ecore_timer_add(0.1, _pwd_complex_entry_clear, NULL);
+
+ lock_pwd_verification_popup_create(event);
+
+ lock_pwd_control_panel_cancel_btn_enable_set(EINA_FALSE);
+}
+
+
+
+void lock_pwd_complex_event(lock_pwd_event_e event)
+{
+ switch(event) {
+ case PWD_EVENT_CORRECT:
+ _pwd_complex_event_correct(event);
+ break;
+ case PWD_EVENT_INCORRECT_WARNING:
+ case PWD_EVENT_INCORRECT:
+ _pwd_complex_event_incorrect(event);
+ break;
+ case PWD_EVENT_INPUT_BLOCK_WARNING:
+ case PWD_EVENT_INPUT_BLOCK:
+ _pwd_complex_event_input_block(event);
+ break;
+ case PWD_EVENT_EMPTY:
+ break;
+ case PWD_EVENT_OVER:
+ break;
+ default:
+ break;
+ }
+}
+
+
+
+static void _pwd_complex_enter_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ret_if(!obj);
+
+ const char *password = elm_entry_entry_get(obj);
+
+ lock_pwd_event_e pwd_event = lock_pwd_verification_verify(password);
+ lock_pwd_complex_event(pwd_event);
+}
+
+
+
+Evas_Object *_pwd_complex_entry_create(void *data)
+{
+ Evas_Object *parent = NULL;
+ Evas_Object *entry = NULL;
+
+ parent = (Evas_Object *)data;
+ goto_if(!parent, ERROR);
+
+ entry = elm_entry_add(parent);
+ goto_if(!entry, ERROR);
+
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_password_set(entry, EINA_TRUE);
+ elm_entry_entry_set(entry, "");
+ elm_entry_cursor_end_set(entry);
+ //elm_entry_scrollabled_set(entry, EINA_TRUE);
+ elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+ elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_PASSWORD);
+ elm_entry_input_panel_imdata_set(entry, "type=lockscreen", 15);
+ elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
+
+ evas_object_smart_callback_add(entry, "activated", _pwd_complex_enter_cb, NULL);
+
+ evas_object_show(entry);
+
+ return entry;
+
+ERROR:
+ _E("Failed to create entry");
+ if (entry) {
+ evas_object_del(entry);
+ entry = NULL;
+ }
+
+ return NULL;
+}
+
+
+
+Evas_Object *lock_pwd_complex_layout_create(void *data)
+{
+ Evas_Object *parent = NULL;
+ Evas_Object *pwd_complex_layout = NULL;
+ Evas_Object *pwd_complex_entry = NULL;
+ Evas_Object *pwd_control_panel = NULL;
+
+ lock_pwd_verification_policy_create();
+
+ parent = (Evas_Object *)data;
+ retv_if(!parent, NULL);
+
+ pwd_complex_layout = elm_layout_add(parent);
+ goto_if(!pwd_complex_layout, ERROR);
+ s_lock_pwd_complex.pwd_complex_layout = pwd_complex_layout;
+
+ if (!elm_layout_file_set(pwd_complex_layout, LOCK_PWD_EDJE_FILE, "lock-complex-password")) {
+ _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE);
+ goto ERROR;
+ }
+
+ evas_object_size_hint_weight_set(pwd_complex_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(pwd_complex_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(pwd_complex_layout);
+
+ /* create entry */
+ pwd_complex_entry = _pwd_complex_entry_create(pwd_complex_layout);
+ goto_if(!pwd_complex_entry, ERROR);
+ s_lock_pwd_complex.pwd_complex_entry = pwd_complex_entry;
+
+ elm_object_part_content_set(pwd_complex_layout, "entry", pwd_complex_entry);
+
+ _pwd_complex_layout_title_set(_("IDS_COM_BODY_ENTER_PIN"));
+
+ /* create control panel */
+ pwd_control_panel = lock_pwd_control_panel_create(pwd_complex_layout);
+ if (!pwd_control_panel) {
+ _E("Failed to create password control panel");
+ } else {
+ elm_object_part_content_set(pwd_complex_layout, "control_panel", pwd_control_panel);
+ }
+
+ evas_object_show(pwd_complex_layout);
+
+ return pwd_complex_layout;
+
+ERROR:
+ _E("Failed to create complex password layout");
+
+ if (pwd_complex_entry) {
+ evas_object_del(pwd_complex_entry);
+ s_lock_pwd_complex.pwd_complex_entry = NULL;
+ }
+
+ if (pwd_complex_layout) {
+ evas_object_del(pwd_complex_layout);
+ s_lock_pwd_complex.pwd_complex_layout = NULL;
+ }
+
+ return NULL;
+}
+
+
+void lock_pwd_complex_layout_del(void)
+{
+ if (s_lock_pwd_complex.timer_pin) {
+ ecore_timer_del(s_lock_pwd_complex.timer_pin);
+ s_lock_pwd_complex.timer_pin = NULL;
+ }
+
+ if (s_lock_pwd_complex.pwd_complex_entry) {
+ evas_object_del(s_lock_pwd_complex.pwd_complex_entry);
+ s_lock_pwd_complex.pwd_complex_entry = NULL;
+ }
+
+ if (s_lock_pwd_complex.pwd_complex_layout) {
+ evas_object_del(s_lock_pwd_complex.pwd_complex_layout);
+ s_lock_pwd_complex.pwd_complex_layout = NULL;
+ }
+}
+
+
+
+void lock_pwd_complex_view_init(void)
+{
+ _D("initialize complex password values");
+ _pwd_complex_layout_title_set(_("IDS_COM_BODY_ENTER_PIN"));
+ elm_object_signal_emit(s_lock_pwd_complex.pwd_complex_layout, "show_title", "title");
+ s_lock_pwd_complex.is_blocked = EINA_FALSE;
+
+ lock_pwd_complex_entry_clear();
+
+ _pwd_complex_lock_time_init();
+
+ lock_pwd_control_panel_cancel_btn_enable_set(EINA_TRUE);
+}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <app_control.h>
+//#include <utilX.h>
+#include <ui-gadget.h>
+
+#include "lock_mgr.h"
+#include "util.h"
+#include "lock_pwd_util.h"
+#include "lock_pwd_control_panel.h"
+
+#define EMG_CALL_LABEL_STYLE_START "<style=far_shadow,bottom><shadow_color=#00000033><font_size=28><align=left><color=#FFFFFF><wrap=none>"
+#define EMG_CALL_LABEL_STYLE_END "</wrap></color></align></font_size></shadow_color></style>"
+#define EMG_BTN_WIDTH 280
+
+static struct _s_lock_pwd_control_panel {
+ Evas_Object *control_panel_layout;
+ Evas_Object *emg_call_btn;
+ Evas_Object *cancel_btn;
+} s_lock_pwd_control_panel = {
+ .control_panel_layout = NULL,
+ .emg_call_btn = NULL,
+ .cancel_btn = NULL,
+};
+
+
+
+static void _emg_call_btn_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ _D("%s", __func__);
+ app_control_h service;
+ Evas_Object *lock_pwd_win = NULL;
+
+ lock_pwd_win = lock_pwd_util_win_get();
+ ret_if(!lock_pwd_win);
+
+ app_control_create(&service);
+ ret_if(!service);
+
+ lock_mgr_sound_play(LOCK_SOUND_TAP);
+
+ UG_INIT_EFL(lock_pwd_win, UG_OPT_INDICATOR_ENABLE);
+
+ if (APP_CONTROL_ERROR_NONE != app_control_set_operation(service, APP_CONTROL_OPERATION_DEFAULT)) {
+ _E("Failed to set operation for app control handle");
+ goto ERROR;
+ }
+
+ //@TODO: need to check appid
+ if (APP_CONTROL_ERROR_NONE != app_control_set_app_id(service, "dialer-efl")) {
+ _E("Failed to launch dialer-efl");
+ goto ERROR;
+ }
+
+ app_control_add_extra_data(service, "emergency_dialer", "emergency");
+
+ if (APP_CONTROL_ERROR_NONE != app_control_send_launch_request(service, NULL, NULL)) {
+ _E("Failed to send launch request");
+ }
+
+ app_control_destroy(service);
+
+ return;
+
+ERROR:
+ _E("Failed to launch emergency call");
+
+ if (service) app_control_destroy(service);
+}
+
+
+
+static void _sliding_label_mode_set(Evas_Object *label)
+{
+ Evas_Object *label_edje = NULL;
+ Evas_Object *tb = NULL;
+ Evas_Coord tb_w = 0;
+
+ ret_if(!label);
+
+ elm_label_slide_mode_set(label, ELM_LABEL_SLIDE_MODE_NONE);
+
+ label_edje = elm_layout_edje_get(label);
+ ret_if(!label_edje);
+
+ tb = (Evas_Object *)edje_object_part_object_get(label_edje, "elm.text");
+ ret_if(!tb);
+
+ evas_object_textblock_size_native_get(tb, &tb_w, NULL);
+ _D("tb width(%d), label width(%f)", tb_w, ELM_SCALE_SIZE(EMG_BTN_WIDTH));
+
+ if ((tb_w > 0) && (tb_w > ELM_SCALE_SIZE(EMG_BTN_WIDTH))) {
+ elm_label_slide_mode_set(label, ELM_LABEL_SLIDE_MODE_AUTO);
+ }
+
+ elm_label_slide_go(label);
+}
+
+
+static Evas_Object *_sliding_label_create(Evas_Object *parent, const char *text)
+{
+ char buf[BUF_SIZE_512] = { 0, };
+ char *markup_txt = NULL;
+ Evas_Object *label = NULL;
+
+ retv_if(!parent, NULL);
+
+ label = elm_label_add(parent);
+ retv_if(!label, NULL);
+
+ markup_txt = elm_entry_utf8_to_markup(text);
+ snprintf(buf, sizeof(buf), "%s%s%s", EMG_CALL_LABEL_STYLE_START, markup_txt, EMG_CALL_LABEL_STYLE_END);
+ free(markup_txt);
+
+ elm_object_style_set(label, "slide_short");
+ elm_label_wrap_width_set(label, EMG_BTN_WIDTH);
+ elm_label_slide_duration_set(label, 2);
+ elm_object_text_set(label, buf);
+ evas_object_show(label);
+
+ _sliding_label_mode_set(label);
+
+ return label;
+}
+
+
+
+static Evas_Object *_emg_call_btn_create(Evas_Object *parent)
+{
+ Evas_Object *btn = NULL;
+
+ retv_if(!parent, NULL);
+
+ btn = _sliding_label_create(parent, _("IDS_LCKSCN_BODY_EMERGENCY_CALL"));
+ retv_if(!btn, NULL);
+
+ elm_object_signal_callback_add(parent, "emg_button", "clicked", _emg_call_btn_clicked_cb, NULL);
+
+ s_lock_pwd_control_panel.emg_call_btn = btn;
+
+ return btn;
+}
+
+
+
+void lock_pwd_control_panel_cancel_btn_enable_set(Eina_Bool enable)
+{
+ ret_if(!s_lock_pwd_control_panel.control_panel_layout);
+
+ if (enable) {
+ elm_object_signal_emit(s_lock_pwd_control_panel.control_panel_layout, "button3,enable", "prog");
+ } else {
+ elm_object_signal_emit(s_lock_pwd_control_panel.control_panel_layout, "button3,disable", "prog");
+ }
+}
+
+
+
+static void _cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _D("%s", __func__);
+ lock_mgr_sound_play(LOCK_SOUND_TAP);
+
+ lock_pwd_util_view_init();
+}
+
+
+
+static Evas_Object *_cancel_btn_create(Evas_Object *parent)
+{
+ Evas_Object *btn = NULL;
+
+ retv_if(!parent, NULL);
+
+ btn = elm_button_add(parent);
+ retv_if(!btn, NULL);
+
+ elm_theme_extension_add(NULL, LOCK_PWD_BTN_EDJE_FILE);
+
+ elm_object_style_set(btn, "right_button");
+ elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL"));
+ evas_object_smart_callback_add(btn, "clicked", (Evas_Smart_Cb)_cancel_btn_clicked_cb, NULL);
+
+ evas_object_show(btn);
+
+ s_lock_pwd_control_panel.cancel_btn = btn;
+
+ return btn;
+}
+
+
+
+Evas_Object *lock_pwd_control_panel_create(Evas_Object *parent)
+{
+ Evas_Object *control_panel_layout = NULL;
+ Evas_Object *cancel_btn = NULL;
+ Evas_Object *emg_call_btn = NULL;
+
+ retv_if(!parent, NULL);
+
+ control_panel_layout = elm_layout_add(parent);
+ retv_if(!control_panel_layout, NULL);
+
+ if (!elm_layout_file_set(control_panel_layout, LOCK_PWD_EDJE_FILE, "lock-control-panel")) {
+ _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE);
+ goto ERROR;
+ }
+ s_lock_pwd_control_panel.control_panel_layout = control_panel_layout;
+
+ evas_object_size_hint_weight_set(control_panel_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(control_panel_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ /* create emg call button */
+ emg_call_btn = _emg_call_btn_create(control_panel_layout);
+ if (!emg_call_btn) {
+ _E("Failed to create operator button");
+ } else {
+ elm_object_part_content_set(control_panel_layout, "button1", emg_call_btn);
+ }
+
+ /* create cancel button */
+ cancel_btn = _cancel_btn_create(control_panel_layout);
+ if (!cancel_btn) {
+ _E("Failed to create cancel button");
+ } else {
+ elm_object_part_content_set(control_panel_layout, "button3", cancel_btn);
+ }
+
+ evas_object_show(control_panel_layout);
+
+ return control_panel_layout;
+
+ERROR:
+ _E("Failed to create password control panel");
+
+ if (cancel_btn) {
+ evas_object_del(cancel_btn);
+ cancel_btn = NULL;
+ }
+
+ if (control_panel_layout) {
+ evas_object_del(control_panel_layout);
+ s_lock_pwd_control_panel.control_panel_layout = NULL;
+ }
+
+ return NULL;
+}
+
+void lock_pwd_control_panel_del(void)
+{
+ if (s_lock_pwd_control_panel.cancel_btn) {
+ evas_object_smart_callback_del(s_lock_pwd_control_panel.cancel_btn, "clicked", (Evas_Smart_Cb)_cancel_btn_clicked_cb);
+ evas_object_del(s_lock_pwd_control_panel.cancel_btn);
+ s_lock_pwd_control_panel.cancel_btn = NULL;
+ }
+
+ if (s_lock_pwd_control_panel.emg_call_btn) {
+ elm_object_signal_callback_del(s_lock_pwd_control_panel.control_panel_layout, "emg_button", "clicked", _emg_call_btn_clicked_cb);
+ evas_object_del(s_lock_pwd_control_panel.emg_call_btn);
+ s_lock_pwd_control_panel.emg_call_btn = NULL;
+ }
+
+ if (s_lock_pwd_control_panel.control_panel_layout) {
+ evas_object_del(s_lock_pwd_control_panel.control_panel_layout);
+ s_lock_pwd_control_panel.control_panel_layout = NULL;
+ }
+}
+
+void lock_pwd_control_panel_pause(void)
+{
+ if (s_lock_pwd_control_panel.emg_call_btn) {
+ elm_label_slide_mode_set(s_lock_pwd_control_panel.emg_call_btn, ELM_LABEL_SLIDE_MODE_NONE);
+ elm_label_slide_go(s_lock_pwd_control_panel.emg_call_btn);
+ }
+}
+
+void lock_pwd_control_panel_resume(void)
+{
+ if (s_lock_pwd_control_panel.emg_call_btn) {
+ elm_label_slide_mode_set(s_lock_pwd_control_panel.emg_call_btn, ELM_LABEL_SLIDE_MODE_AUTO);
+ elm_label_slide_go(s_lock_pwd_control_panel.emg_call_btn);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <app_control.h>
+#include <bundle.h>
+#include <aul.h>
+#include <security-server.h>
+#include <vconf.h>
+
+#include "lock_mgr.h"
+#include "util.h"
+#include "status.h"
+#include "lock_pwd_util.h"
+#include "lock_pwd_simple.h"
+#include "lock_pwd_control_panel.h"
+
+#define DOT_TIME 1.5
+#define CORRECT_TIME 0.2
+
+static struct _s_lock_pwd_simple {
+ Evas_Object *pwd_simple_layout;
+ Ecore_Timer *timer_dot;
+
+ Eina_Bool is_blocked;
+
+ char pwd_simple[MAX_PASSWORD_NUM +1];
+ int pwd_simple_length;
+
+ Ecore_Timer *timer_correct;
+ Ecore_Timer *timer_pin;
+ int pin_time_remain;
+} s_lock_pwd_simple = {
+ .pwd_simple_layout = NULL,
+ .timer_dot = NULL,
+
+ .is_blocked = EINA_FALSE,
+
+ .pwd_simple = { 0, },
+ .pwd_simple_length = 0,
+
+ .timer_correct = NULL,
+ .timer_pin = NULL,
+ .pin_time_remain = PASSWORD_BLOCK_SECONDS,
+};
+
+
+
+Eina_Bool lock_pwd_simple_is_blocked_get(void)
+{
+ return s_lock_pwd_simple.is_blocked;
+}
+
+
+
+
+static void _pwd_simple_layout_title_set(const char *title)
+{
+ ret_if(!s_lock_pwd_simple.pwd_simple_layout);
+ ret_if(!title);
+ elm_object_part_text_set(s_lock_pwd_simple.pwd_simple_layout, "title", title);
+}
+
+
+
+static void _pwd_simple_backspace(int length)
+{
+ char buf[BUF_SIZE_32] = { 0, };
+ ret_if(!s_lock_pwd_simple.pwd_simple_layout);
+
+ snprintf(buf, sizeof(buf), "dot_hide%d", length);
+ elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, buf, "keyboard");
+ if (s_lock_pwd_simple.timer_dot) {
+ ecore_timer_del(s_lock_pwd_simple.timer_dot);
+ s_lock_pwd_simple.timer_dot = NULL;
+ }
+}
+
+
+
+static Eina_Bool _hide_dot_cb(void *data)
+{
+ char buf[BUF_SIZE_32] = { 0, };
+ retv_if(!s_lock_pwd_simple.pwd_simple_layout, ECORE_CALLBACK_CANCEL);
+
+ snprintf(buf, sizeof(buf), "dot_show%d", (int)data);
+ elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, buf, "keyboard");
+ s_lock_pwd_simple.timer_dot = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _pwd_simple_input(int length, const char *text)
+{
+ char part_buf[BUF_SIZE_32] = { 0, };
+ char signal_buf[BUF_SIZE_32] = { 0, };
+ ret_if(!s_lock_pwd_simple.pwd_simple_layout);
+
+ lock_mgr_sound_play(LOCK_SOUND_BTN_KEY);
+
+ snprintf(part_buf, sizeof(part_buf), "panel%d", length);
+ elm_object_part_text_set(s_lock_pwd_simple.pwd_simple_layout, part_buf, text);
+
+ snprintf(signal_buf, sizeof(signal_buf), "input_show%d", length);
+ elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, signal_buf, "keyboard");
+
+ if (length > 0) {
+ snprintf(signal_buf, sizeof(signal_buf), "dot_show%d", length-1);
+ elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, signal_buf, "keyboard");
+ }
+
+ if (s_lock_pwd_simple.timer_dot) {
+ ecore_timer_del(s_lock_pwd_simple.timer_dot);
+ s_lock_pwd_simple.timer_dot = NULL;
+ }
+
+ if (length < MAX_PASSWORD_NUM-1) {
+ s_lock_pwd_simple.timer_dot = ecore_timer_add(DOT_TIME, _hide_dot_cb, (void *)length);
+ }
+}
+
+
+
+static void _pwd_simple_keypad_process(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ _D("%s", __func__);
+
+ if (s_lock_pwd_simple.is_blocked) {
+ _E("blocked");
+ lock_mgr_sound_play(LOCK_SOUND_BTN_KEY);
+ return;
+ }
+
+ if (!strncmp("Backspace", source, strlen("Backspace"))) {
+ _E("Backspace");
+ lock_mgr_sound_play(LOCK_SOUND_BTN_KEY);
+ ret_if(s_lock_pwd_simple.pwd_simple_length <= 0);
+ _pwd_simple_backspace(--s_lock_pwd_simple.pwd_simple_length);
+ } else {
+ if (s_lock_pwd_simple.pwd_simple_length >= MAX_PASSWORD_NUM) {
+ _E("Too long");
+ return;
+ } else {
+ s_lock_pwd_simple.pwd_simple[s_lock_pwd_simple.pwd_simple_length] = *source;
+ _pwd_simple_input(s_lock_pwd_simple.pwd_simple_length++, source);
+ }
+ }
+
+ if (s_lock_pwd_simple.pwd_simple_length == MAX_PASSWORD_NUM) {
+ lock_pwd_event_e pwd_event = lock_pwd_verification_verify(s_lock_pwd_simple.pwd_simple);
+ lock_pwd_simple_event(pwd_event);
+ }
+}
+
+
+
+Evas_Object *lock_pwd_simple_layout_create(void *data)
+{
+ Evas_Object *parent = NULL;
+ Evas_Object *pwd_simple_layout = NULL;
+ Evas_Object *pwd_control_panel = NULL;
+
+ lock_pwd_verification_policy_create();
+
+ parent = (Evas_Object *)data;
+ retv_if(!parent, NULL);
+
+ pwd_simple_layout = elm_layout_add(parent);
+ goto_if(!pwd_simple_layout, ERROR);
+ s_lock_pwd_simple.pwd_simple_layout = pwd_simple_layout;
+
+ if (!elm_layout_file_set(pwd_simple_layout, LOCK_PWD_EDJE_FILE, "lock-simple-password")) {
+ _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE);
+ goto ERROR;
+ }
+
+ evas_object_size_hint_weight_set(pwd_simple_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(pwd_simple_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(pwd_simple_layout);
+
+ elm_object_signal_callback_add(pwd_simple_layout, "keypad_down_clicked", "*", _pwd_simple_keypad_process, NULL);
+ _pwd_simple_layout_title_set(_("IDS_COM_BODY_ENTER_PIN"));
+
+ /* create control panel */
+ pwd_control_panel = lock_pwd_control_panel_create(pwd_simple_layout);
+ if (!pwd_control_panel) {
+ _E("Failed to create password control panel");
+ } else {
+ elm_object_part_content_set(pwd_simple_layout, "control_panel", pwd_control_panel);
+ }
+
+ return pwd_simple_layout;
+
+ERROR:
+ _E("Failed to create simple password layout");
+
+ if (pwd_simple_layout) {
+ evas_object_del(pwd_simple_layout);
+ s_lock_pwd_simple.pwd_simple_layout = NULL;
+ }
+
+ return NULL;
+}
+
+
+
+void lock_pwd_simple_layout_del(void)
+{
+ if (s_lock_pwd_simple.pwd_simple_layout) {
+ evas_object_del(s_lock_pwd_simple.pwd_simple_layout);
+ s_lock_pwd_simple.pwd_simple_layout = NULL;
+ }
+
+ if (s_lock_pwd_simple.timer_dot) {
+ ecore_timer_del(s_lock_pwd_simple.timer_dot);
+ s_lock_pwd_simple.timer_dot = NULL;
+ }
+
+ if (s_lock_pwd_simple.timer_pin) {
+ ecore_timer_del(s_lock_pwd_simple.timer_pin);
+ s_lock_pwd_simple.timer_pin = NULL;
+ }
+}
+
+
+
+void lock_pwd_simple_entry_clear(void)
+{
+ int i = 0;
+ char buf[BUF_SIZE_32] = { 0, };
+
+ ret_if(!s_lock_pwd_simple.pwd_simple_layout);
+
+ if (s_lock_pwd_simple.timer_dot) {
+ ecore_timer_del(s_lock_pwd_simple.timer_dot);
+ s_lock_pwd_simple.timer_dot = NULL;
+ }
+
+ for (i = 0; i <= 3; i++) {
+ snprintf(buf, sizeof(buf), "dot_hide%d", i);
+ elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, buf, "keyboard");
+ }
+ s_lock_pwd_simple.pwd_simple_length = 0;
+}
+
+
+
+static Eina_Bool _pwd_simple_entry_clear(void *data)
+{
+ lock_pwd_simple_entry_clear();
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _pwd_simple_event_incorrect(lock_pwd_event_e event)
+{
+ char temp_str[BUF_SIZE_256] = { 0, };
+ char temp_left[BUF_SIZE_256] = { 0, };
+ int remain_attempt = 0;
+
+ remain_attempt = lock_pwd_verification_remain_attempt_get();
+ _D("remain_attempt(%d)", remain_attempt);
+
+ if (remain_attempt == 1) {
+ strncpy(temp_left, _("IDS_IDLE_BODY_1_ATTEMPT_LEFT"), sizeof(temp_left));
+ temp_left[sizeof(temp_left) - 1] = '\0';
+ } else {
+ snprintf(temp_left, sizeof(temp_left), _("IDS_IDLE_BODY_PD_ATTEMPTS_LEFT"), remain_attempt);
+ }
+ snprintf(temp_str, sizeof(temp_str), "%s<br>%s", _("IDS_COM_BODY_INCORRECT_PIN"), temp_left);
+ _pwd_simple_layout_title_set(temp_str);
+
+ ecore_timer_add(0.1, _pwd_simple_entry_clear, NULL);
+
+ lock_pwd_verification_popup_create(event);
+}
+
+
+
+static Eina_Bool _pwd_correct_timer_cb(void *data)
+{
+ lock_pwd_util_win_hide();
+ lock_pwd_simple_entry_clear();
+ _pwd_simple_layout_title_set(_("IDS_COM_BODY_ENTER_PIN"));
+
+ lock_mgr_idle_lock_state_set(VCONFKEY_IDLE_UNLOCK);
+ lock_mgr_sound_play(LOCK_SOUND_UNLOCK);
+
+ s_lock_pwd_simple.timer_correct = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _pwd_simple_event_correct(lock_pwd_event_e event)
+{
+ if (s_lock_pwd_simple.timer_correct) {
+ ecore_timer_del(s_lock_pwd_simple.timer_correct);
+ }
+
+ s_lock_pwd_simple.timer_correct = ecore_timer_add(CORRECT_TIME, _pwd_correct_timer_cb, NULL);
+ if(!s_lock_pwd_simple.timer_correct) {
+ _E("Failed to add tiemr for correct password event");
+ }
+}
+
+
+
+static void _pwd_simple_lock_time_init(void)
+{
+ if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, "") < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR);
+ }
+}
+
+
+
+static void _pwd_simple_lock_time_save(void)
+{
+ time_t cur_time = time(NULL);
+ char buf[64] = { 0, };
+ snprintf(buf, sizeof(buf), "%ld", cur_time);
+ if (vconf_set_str(VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR, buf) < 0) {
+ _E("Failed to set vconfkey : %s", VCONFKEY_SETAPPL_PASSWORD_TIMESTAMP_STR);
+ }
+}
+
+
+
+static Eina_Bool _wrong_pwd_wait_timer_cb(void *data)
+{
+ char try_again_buf[BUF_SIZE_256] = { 0, };
+ char incorrect_pass_buf[BUF_SIZE_256] = { 0, };
+
+ retv_if(!s_lock_pwd_simple.pwd_simple_layout, ECORE_CALLBACK_CANCEL);
+
+ snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), s_lock_pwd_simple.pin_time_remain);
+ snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s<br>%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf);
+ _pwd_simple_layout_title_set(incorrect_pass_buf);
+
+ if (s_lock_pwd_simple.pin_time_remain == PASSWORD_BLOCK_SECONDS ||
+ s_lock_pwd_simple.pin_time_remain > 0) {
+ s_lock_pwd_simple.pin_time_remain--;
+ return ECORE_CALLBACK_RENEW;
+ } else {
+ lock_pwd_simple_view_init();
+
+ int lcd_state = lock_mgr_lcd_state_get();
+ if (lcd_state == LCD_STATE_OFF) {
+ lock_mgr_lockscreen_launch();
+ }
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _pwd_simple_event_input_block(lock_pwd_event_e event)
+{
+ _D("%s", __func__);
+
+ int block_sec = PASSWORD_BLOCK_SECONDS;
+ char try_again_buf[200] = { 0, };
+ char incorrect_pass_buf[200] = { 0, };
+
+ ret_if(!s_lock_pwd_simple.pwd_simple_layout);
+
+ _pwd_simple_lock_time_save();
+
+ snprintf(try_again_buf, sizeof(try_again_buf), _("IDS_LCKSCN_POP_TRY_AGAIN_IN_PD_SECONDS"), block_sec);
+ snprintf(incorrect_pass_buf, sizeof(incorrect_pass_buf), "%s<br>%s", _("IDS_COM_BODY_INCORRECT_PIN"), try_again_buf);
+ _pwd_simple_layout_title_set(incorrect_pass_buf);
+
+ s_lock_pwd_simple.is_blocked = EINA_TRUE;
+
+ if (s_lock_pwd_simple.timer_pin) {
+ ecore_timer_del(s_lock_pwd_simple.timer_pin);
+ s_lock_pwd_simple.timer_pin = NULL;
+ }
+
+ s_lock_pwd_simple.timer_pin = ecore_timer_add(1.0, _wrong_pwd_wait_timer_cb, NULL);
+
+ ecore_timer_add(0.1, _pwd_simple_entry_clear, NULL);
+
+ lock_pwd_verification_popup_create(event);
+
+ lock_pwd_control_panel_cancel_btn_enable_set(EINA_FALSE);
+}
+
+
+
+void lock_pwd_simple_event(lock_pwd_event_e event)
+{
+ switch(event) {
+ case PWD_EVENT_CORRECT:
+ _pwd_simple_event_correct(event);
+ break;
+ case PWD_EVENT_INCORRECT_WARNING:
+ case PWD_EVENT_INCORRECT:
+ _pwd_simple_event_incorrect(event);
+ break;
+ case PWD_EVENT_INPUT_BLOCK_WARNING:
+ case PWD_EVENT_INPUT_BLOCK:
+ _pwd_simple_event_input_block(event);
+ break;
+ case PWD_EVENT_EMPTY:
+ break;
+ case PWD_EVENT_OVER:
+ break;
+ default:
+ break;
+ }
+}
+
+void lock_pwd_simple_view_init(void)
+{
+ _D("initialize simpel password values");
+ s_lock_pwd_simple.pin_time_remain = PASSWORD_BLOCK_SECONDS;
+
+ _pwd_simple_layout_title_set(_("IDS_COM_BODY_ENTER_PIN"));
+ elm_object_signal_emit(s_lock_pwd_simple.pwd_simple_layout, "show_title", "title");
+ s_lock_pwd_simple.is_blocked = EINA_FALSE;
+
+ lock_pwd_simple_entry_clear();
+
+ _pwd_simple_lock_time_init();
+
+ lock_pwd_control_panel_cancel_btn_enable_set(EINA_TRUE);
+}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <system_settings.h>
+#include <efl_assist.h>
+
+#include "lock_mgr.h"
+#include "util.h"
+#include "status.h"
+#include "status.h"
+#include "lock_pwd_util.h"
+#include "lock_pwd_simple.h"
+#include "lock_pwd_complex.h"
+
+static struct _s_lock_pwd_util {
+ Evas_Object *lock_pwd_win;
+ Evas_Object *conformant;
+ Evas_Object *layout;
+ Evas_Object *bg;
+
+ int win_w;
+ int win_h;
+} s_lock_pwd_util = {
+ .lock_pwd_win = NULL,
+ .conformant = NULL,
+ .layout = NULL,
+ .bg = NULL,
+
+ .win_w = 0,
+ .win_h = 0,
+};
+
+
+
+int lock_pwd_util_win_width_get(void)
+{
+ return s_lock_pwd_util.win_w;
+}
+
+
+
+int lock_pwd_util_win_height_get(void)
+{
+ return s_lock_pwd_util.win_h;
+}
+
+
+
+static Evas_Object *_pwd_conformant_add(void *data)
+{
+ Evas_Object *win = NULL;
+ Evas_Object *conformant = NULL;
+
+ win = (Evas_Object *)data;
+ goto_if(!win, ERROR);
+
+ conformant = elm_conformant_add(win);
+ goto_if(!conformant, ERROR);
+
+ evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, conformant);
+
+ elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+ elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_TRANSLUCENT);
+ elm_win_conformant_set(win, EINA_TRUE);
+
+ evas_object_show(conformant);
+
+ return conformant;
+
+ERROR:
+ _E("Failed to add password conformant");
+
+ if (conformant) {
+ evas_object_del(conformant);
+ conformant = NULL;
+ }
+
+ return NULL;
+}
+
+
+void lock_pwd_util_bg_image_set(Evas_Object *bg, char *file)
+{
+ char *bg_path = NULL;
+ int ret = 0;
+
+ ret_if(!bg);
+
+ if (file) {
+ _D("lock bg : %s", file);
+ if (!elm_bg_file_set(bg, file, NULL)) {
+ _E("Failed to set BG : %s", file);
+ goto ERROR;
+ }
+ } else {
+ ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, &bg_path);
+ if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
+ _E("Failed to get system setting value : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
+ goto ERROR;
+ }
+ _D("lock bg : %s", bg_path);
+
+ if (!elm_bg_file_set(bg, bg_path, NULL)) {
+ _E("Failed to set bg : %s", bg_path);
+ goto ERROR;
+ }
+
+ if (bg_path) {
+ free(bg_path);
+ bg_path = NULL;
+ }
+ }
+
+ return;
+
+ERROR:
+ if (bg_path) {
+ free(bg_path);
+ bg_path = NULL;
+ }
+
+ if (!elm_bg_file_set(bg, LOCK_MGR_DEFAULT_BG_PATH, NULL)) {
+ _E("Failed to set default BG : %s. Retry to set default BG.", LOCK_MGR_DEFAULT_BG_PATH);
+ if (!elm_bg_file_set(bg, LOCK_MGR_DEFAULT_BG_PATH, NULL)) {
+ _E("Failed to set default BG : %s", LOCK_MGR_DEFAULT_BG_PATH);
+ }
+ }
+
+ return;
+}
+
+
+
+static void _wallpaper_lock_screen_changed_cb(system_settings_key_e key, void *data)
+{
+ _D("%s", __func__);
+ Evas_Object *bg = (Evas_Object *)data;
+ ret_if(!bg);
+
+ lock_pwd_util_bg_image_set(bg, NULL);
+}
+
+
+
+static Evas_Object *_pwd_bg_add(void *data)
+{
+ Evas_Object *bg = NULL;
+ Evas_Object *parent = NULL;
+ int ret = 0;
+
+ parent = (Evas_Object *)data;
+ retv_if(!parent, NULL);
+
+ bg = elm_bg_add(parent);
+ goto_if(!bg, ERROR);
+
+ elm_bg_option_set(bg, ELM_BG_OPTION_SCALE);
+
+ elm_win_resize_object_add(parent, bg);
+
+ evas_object_show(bg);
+
+ lock_pwd_util_bg_image_set(bg, NULL);
+
+ ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN, _wallpaper_lock_screen_changed_cb, bg);
+ if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
+ _E("Failed to register settings changed cb : %d", SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
+ }
+
+ return bg;
+
+ERROR:
+ _E("Failed to add password bg");
+
+ if (bg) {
+ evas_object_del(bg);
+ bg = NULL;
+ }
+
+ return NULL;
+}
+
+
+
+static Evas_Object *_pwd_layout_create(void *data)
+{
+ Evas_Object *layout = NULL;
+ Evas_Object *parent = NULL;
+
+ parent = (Evas_Object *)data;
+ retv_if(!parent, NULL);
+
+ layout = elm_layout_add(parent);
+ retv_if(!layout, NULL);
+
+ if (!elm_layout_file_set(layout, LOCK_PWD_EDJE_FILE, "lock_pwd")) {
+ _E("Failed to set edje file : %s", LOCK_PWD_EDJE_FILE);
+ goto ERROR;
+ }
+
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ evas_object_show(layout);
+
+ return layout;
+
+ERROR:
+ _E("Failed to create password layout");
+
+ if (layout) {
+ evas_object_del(layout);
+ layout = NULL;
+ }
+
+ return NULL;
+}
+
+
+
+void lock_pwd_util_back_key_relased(void)
+{
+ _D("%s", __func__);
+
+ ret_if(lock_pwd_simple_is_blocked_get());
+
+ lock_mgr_sound_play(LOCK_SOUND_TAP);
+
+ lock_pwd_util_view_init();
+}
+
+
+
+void lock_pwd_util_create(Eina_Bool is_show)
+{
+ Evas_Object *win = NULL;
+ Evas_Object *conformant = NULL;
+ Evas_Object *bg = NULL;
+ Evas_Object *layout = NULL;
+ Evas_Object *pwd_layout = NULL;
+ int lock_type = 0;
+ int x = 0, y = 0, w = 0, h = 0;
+
+ if (!s_lock_pwd_util.lock_pwd_win) {
+ win = window_mgr_pwd_lock_win_create();
+ ret_if(!win);
+ s_lock_pwd_util.lock_pwd_win = win;
+
+ elm_win_screen_size_get(win, &x, &y, &w, &h);
+ _D("win size : %dx%d(%d, %d)", w, h, x, y);
+ s_lock_pwd_util.win_w = w;
+ s_lock_pwd_util.win_h = h;
+ }
+
+ conformant = _pwd_conformant_add(win);
+ goto_if(!conformant, ERROR);
+ s_lock_pwd_util.conformant = conformant;
+
+ layout = _pwd_layout_create(conformant);
+ goto_if(!layout, ERROR);
+ s_lock_pwd_util.layout = layout;
+
+ elm_object_content_set(conformant, layout);
+
+ bg = _pwd_bg_add(win);
+ goto_if(!bg, ERROR);
+ s_lock_pwd_util.bg = bg;
+
+ elm_object_part_content_set(layout, "sw.bg", bg);
+
+ lock_type = status_active_get()->setappl_screen_lock_type_int;
+ _D("lock type : %d", lock_type);
+
+ switch(lock_type) {
+ case SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD:
+ pwd_layout = lock_pwd_simple_layout_create(layout);
+ break;
+ case SETTING_SCREEN_LOCK_TYPE_PASSWORD:
+ pwd_layout = lock_pwd_complex_layout_create(layout);
+ break;
+ default:
+ _E("lock type is not password : %d", lock_type);
+ goto ERROR;
+ }
+ goto_if(!pwd_layout, ERROR);
+
+ elm_object_part_content_set(layout, "sw.lock_pwd", pwd_layout);
+
+ if (is_show) {
+ evas_object_show(win);
+ }
+
+ return;
+
+ERROR:
+ _E("Failed to launch password lockscreen");
+
+ lock_pwd_util_del();
+
+ return;
+}
+
+
+
+void lock_pwd_util_del(void)
+{
+ int lock_type = status_active_get()->setappl_screen_lock_type_int;
+ _D("lock type : %d", lock_type);
+
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
+ lock_pwd_simple_layout_del();
+ } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
+ lock_pwd_complex_layout_del();
+ }
+
+ if (s_lock_pwd_util.layout) {
+ evas_object_del(s_lock_pwd_util.layout);
+ s_lock_pwd_util.layout = NULL;
+ }
+
+ if (s_lock_pwd_util.conformant) {
+ evas_object_del(s_lock_pwd_util.conformant);
+ s_lock_pwd_util.conformant = NULL;
+ }
+
+ if (s_lock_pwd_util.bg) {
+ system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN);
+ evas_object_del(s_lock_pwd_util.bg);
+ s_lock_pwd_util.bg = NULL;
+ }
+
+ if (s_lock_pwd_util.lock_pwd_win) {
+ evas_object_del(s_lock_pwd_util.lock_pwd_win);
+ s_lock_pwd_util.lock_pwd_win = NULL;
+ }
+}
+
+
+
+
+static void _pwd_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ret_if(!data);
+
+ evas_object_del((Evas_Object *)data);
+}
+
+
+
+void lock_pwd_util_popup_create(char *title, char *text, Evas_Smart_Cb func, double timeout)
+{
+ Evas_Object *popup = NULL;
+ Evas_Object *btn = NULL;
+
+ ret_if(!s_lock_pwd_util.lock_pwd_win);
+
+ popup = elm_popup_add(s_lock_pwd_util.lock_pwd_win);
+ ret_if(!popup);
+
+ elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ if (title) {
+ elm_object_part_text_set(popup, "title,text", title);
+ }
+
+ if (text) {
+ elm_object_text_set(popup, text);
+ }
+
+ btn = elm_button_add(popup);
+ goto_if(!btn, ERROR);
+
+ elm_object_style_set(btn, "popup");
+ elm_object_text_set(btn, _("IDS_COM_BUTTON_OK_ABB"));
+ elm_object_part_content_set(popup, "button1", btn);
+
+ if (timeout > 0.0) {
+ elm_popup_timeout_set(popup, timeout);
+ }
+
+ if (func) {
+ evas_object_smart_callback_add(btn, "clicked", func, popup);
+ ea_object_event_callback_add(popup, EA_CALLBACK_BACK, func, popup);
+ } else {
+ evas_object_smart_callback_add(btn, "clicked", _pwd_popup_cb, popup);
+ ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pwd_popup_cb, popup);
+ }
+
+ evas_object_show(popup);
+
+ return;
+
+ERROR:
+ _E("Failed to create lock popup");
+
+ if (btn) {
+ evas_object_del(btn);
+ btn = NULL;
+ }
+
+ if (popup) {
+ evas_object_del(popup);
+ popup = NULL;
+ }
+
+ return;
+}
+
+
+
+void lock_pwd_util_view_init(void)
+{
+ _D("initialize password lock values");
+ int lock_type = 0;
+
+ if (!lock_mgr_lockscreen_launch()) {
+ _E("Failed to launch lockscreen");
+ }
+
+ /* clear pwd lockscreen */
+ lock_type = status_active_get()->setappl_screen_lock_type_int;
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) {
+ lock_pwd_simple_view_init();
+ } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
+ }
+}
+
+
+
+Evas_Object *lock_pwd_util_win_get(void)
+{
+ return s_lock_pwd_util.lock_pwd_win;
+}
+
+
+
+Eina_Bool lock_pwd_util_win_visible_get(void)
+{
+ retv_if(!s_lock_pwd_util.lock_pwd_win, EINA_FALSE);
+ return evas_object_visible_get(s_lock_pwd_util.lock_pwd_win);
+}
+
+
+
+void lock_pwd_util_win_show(void)
+{
+ ret_if(!s_lock_pwd_util.lock_pwd_win);
+ evas_object_show(s_lock_pwd_util.lock_pwd_win);
+}
+
+
+
+void lock_pwd_util_win_hide(void)
+{
+ ret_if(!s_lock_pwd_util.lock_pwd_win);
+ evas_object_hide(s_lock_pwd_util.lock_pwd_win);
+}
--- /dev/null
+/*
+ * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Elementary.h>
+#include <security-server.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include "util.h"
+#include "status.h"
+#include "lock_mgr.h"
+#include "lock_pwd_util.h"
+#include "lock_pwd_verification.h"
+#include "lock_pwd_simple.h"
+
+#define PASSWORD_LENGTH_MIN 4
+#define PASSWORD_LENGTH_MAX 16
+
+typedef enum {
+ NORMAL_PWD = 0,
+ EMPTY_PWD = 1,
+ OVERLENGTH_PWD = 2,
+} lock_pwd_type;
+
+static struct _s_lock_pwd_verification {
+ unsigned int current_attempt;
+ unsigned int remain_attempt;
+ unsigned int max_attempt;
+ unsigned int expire_sec;
+ unsigned int incorrect_count;
+} s_lock_pwd_verification = {
+ .current_attempt = 0,
+ .remain_attempt = 0,
+ .max_attempt = 0,
+ .expire_sec = 0,
+ .incorrect_count = 0,
+};
+
+
+
+int lock_pwd_verification_current_attempt_get(void)
+{
+ return s_lock_pwd_verification.current_attempt;
+}
+
+
+int lock_pwd_verification_remain_attempt_get(void)
+{
+ return s_lock_pwd_verification.remain_attempt;
+}
+
+
+static Eina_Bool _pwd_verification_check_pwd(const char *str)
+{
+ int ret = SECURITY_SERVER_API_ERROR_PASSWORD_MISMATCH;
+ unsigned int current_attempt = 0;
+ unsigned int max_attempt = 0;
+ unsigned int expire_sec = 0;
+
+ ret = security_server_chk_pwd(str, ¤t_attempt, &max_attempt, &expire_sec);
+ _D("ret(%d), current_attempt(%d), max_attempt(%d), valid_sec(%d)", ret, current_attempt, max_attempt, expire_sec);
+
+ s_lock_pwd_verification.current_attempt = current_attempt;
+ s_lock_pwd_verification.max_attempt = max_attempt;
+ s_lock_pwd_verification.expire_sec = expire_sec;
+
+ switch(ret) {
+ case SECURITY_SERVER_API_SUCCESS:
+ case SECURITY_SERVER_API_ERROR_PASSWORD_EXPIRED:
+ _E("Correct password");
+ return EINA_TRUE;
+ case SECURITY_SERVER_API_ERROR_PASSWORD_RETRY_TIMER:
+ _E("Timer set! : not saved");
+ break;
+ default:
+ _E("Incorrect password");
+ break;
+ }
+
+ return EINA_FALSE;
+}
+
+
+static lock_pwd_type _pwd_verification_check_length(const char *str, int min, int max)
+{
+ int len = 0;
+
+ retv_if(!str, EMPTY_PWD);
+
+ len = strlen(str);
+ retv_if(len == 0, EMPTY_PWD);
+
+ retv_if(len < min || len > max, OVERLENGTH_PWD);
+
+ return NORMAL_PWD;
+}
+
+static void _pwd_values_init(void)
+{
+ s_lock_pwd_verification.current_attempt = 0;
+ s_lock_pwd_verification.remain_attempt = PASSWORD_ATTEMPTS_MAX_NUM;
+ s_lock_pwd_verification.max_attempt = PASSWORD_ATTEMPTS_MAX_NUM;
+ s_lock_pwd_verification.incorrect_count = 0;
+}
+
+lock_pwd_event_e lock_pwd_verification_verify(const char *password)
+{
+ lock_pwd_type pwd_type = NORMAL_PWD;
+
+ retv_if(!password, PWD_EVENT_EMPTY);
+
+ pwd_type = _pwd_verification_check_length(password, PASSWORD_LENGTH_MIN, PASSWORD_LENGTH_MAX);
+ switch(pwd_type) {
+ case NORMAL_PWD:
+ if (_pwd_verification_check_pwd(password)) {
+ _D("Correct Password");
+ _pwd_values_init();
+ return PWD_EVENT_CORRECT;
+ } else {
+ s_lock_pwd_verification.incorrect_count++;
+ s_lock_pwd_verification.remain_attempt--;
+ _D("incorrect_count(%d), remain_attempt(%d)", s_lock_pwd_verification.incorrect_count, s_lock_pwd_verification.remain_attempt);
+
+ if (s_lock_pwd_verification.remain_attempt == 0) {
+ _pwd_values_init();
+ return PWD_EVENT_INPUT_BLOCK;
+ } else {
+ return PWD_EVENT_INCORRECT;
+ }
+ }
+ break;
+ case EMPTY_PWD:
+ return PWD_EVENT_EMPTY;
+ break;
+ case OVERLENGTH_PWD:
+ return PWD_EVENT_OVER;
+ break;
+ }
+
+ return PWD_EVENT_INCORRECT;
+}
+
+void lock_pwd_verification_policy_create(void)
+{
+ int ret = 0;
+ unsigned int current_attempt = 0;
+ unsigned int max_attempt = 0;
+ unsigned int expire_sec = 0;
+
+ ret = security_server_is_pwd_valid(¤t_attempt, &max_attempt, &expire_sec);
+ _D("policy status(%d), current_attempt(%d), max_attempt(%d)", ret, current_attempt, max_attempt);
+
+ if (ret == SECURITY_SERVER_API_ERROR_NO_PASSWORD ||
+ ret == SECURITY_SERVER_API_ERROR_PASSWORD_EXIST) {
+ s_lock_pwd_verification.current_attempt = current_attempt;
+ s_lock_pwd_verification.max_attempt = max_attempt;
+ s_lock_pwd_verification.expire_sec = expire_sec;
+ }
+
+ s_lock_pwd_verification.remain_attempt = PASSWORD_ATTEMPTS_MAX_NUM;
+ s_lock_pwd_verification.incorrect_count = 0;
+
+ return;
+}
+
+void lock_pwd_verification_popup_create(lock_pwd_event_e event)
+{
+ char popup_text[BUF_SIZE_512] = { 0, };
+ int remain_attempt = 0;
+ int current_attempt = 0;
+
+ current_attempt = lock_pwd_verification_current_attempt_get();
+ remain_attempt = lock_pwd_verification_remain_attempt_get();
+ _D("current_attemp(%d), remain_attempt(%d)", current_attempt, remain_attempt);
+
+ switch(event) {
+ case PWD_EVENT_INCORRECT_WARNING:
+ snprintf(popup_text, sizeof(popup_text), _("IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"), current_attempt, remain_attempt);
+ lock_pwd_util_popup_create(NULL, popup_text, NULL, 0.0);
+ break;
+ case PWD_EVENT_INPUT_BLOCK:
+ snprintf(popup_text, sizeof(popup_text), _("IDS_LCKSCN_POP_YOU_HAVE_MADE_P1SD_UNSUCCESSFUL_ATTEMPTS_TO_UNLOCK_YOUR_DEVICE_TRY_AGAIN_IN_P2SD_SECONDS"), PASSWORD_ATTEMPTS_MAX_NUM, PASSWORD_BLOCK_SECONDS);
+ lock_pwd_util_popup_create(_("IDS_LCKSCN_HEADER_UNABLE_TO_UNLOCK_SCREEN_ABB"), popup_text, NULL, 15.0);
+ break;
+ case PWD_EVENT_INPUT_BLOCK_WARNING:
+ snprintf(popup_text, sizeof(popup_text), _("IDS_LCKSCN_POP_YOU_HAVE_ATTEMPTED_TO_UNLOCK_THE_DEVICE_INCORRECTLY_P1SD_TIMES_YOU_HAVE_P2SD_ATTEMPTS_LEFT_BEFORE_THE_DEVICE_IS_RESET_TO_FACTORY_MSG"), current_attempt, remain_attempt);
+ lock_pwd_util_popup_create(NULL, popup_text, NULL, 0.0);
+ break;
+ default:
+ break;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "popup.h"
+#include "util.h"
+
+#define POPUP_DATA_KEY_WINDOW "__popup_window__"
+
+static void _popup_destroy(Evas_Object *popup)
+{
+ Evas_Object *win = NULL;
+
+ if (popup) {
+ win = evas_object_data_del(popup, POPUP_DATA_KEY_WINDOW);
+ evas_object_del(popup);
+
+ if (win) {
+ evas_object_del(win);
+ }
+ }
+}
+
+static Evas_Object *_window_create(void)
+{
+ Evas_Object *win = NULL;
+ int win_w = 0, win_h = 0;
+
+ win = elm_win_add(NULL, "STARTER-POPUP", ELM_WIN_DIALOG_BASIC);
+ retv_if(!win, NULL);
+
+ elm_win_title_set(win, "STARTER-POPUP");
+ elm_win_alpha_set(win, EINA_TRUE);
+ elm_win_borderless_set(win, EINA_TRUE);
+ elm_win_autodel_set(win, EINA_TRUE);
+ elm_win_raise(win);
+
+ elm_win_screen_size_get(win, NULL, NULL, &win_w, &win_h);
+ _D("win size : (%dx%d)", win_w, win_h);
+ evas_object_resize(win, win_w, win_h);
+
+ evas_object_show(win);
+
+ return win;
+}
+
+
+
+static void _popup_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *popup = (Evas_Object *)data;
+ ret_if(!popup);
+
+ _popup_destroy(popup);
+}
+
+
+
+Evas_Object *popup_create(const char *title, const char *text)
+{
+ Evas_Object *win = NULL;
+ Evas_Object *popup = NULL;
+ Evas_Object *btn = NULL;
+
+ retv_if(!title, NULL);
+ retv_if(!text, NULL);
+
+ win = _window_create();
+ goto_if(!win, ERROR);
+
+ popup = elm_popup_add(win);
+ goto_if(!popup, ERROR);
+
+ elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_text_set(popup, "title,text", title);
+ elm_object_text_set(popup, text);
+ evas_object_data_set(popup, POPUP_DATA_KEY_WINDOW, win);
+
+ /* ok button */
+ btn = elm_button_add(popup);
+ goto_if(!btn, ERROR);
+
+ elm_object_style_set(btn, "popup");
+ elm_object_text_set(btn, S_("IDS_COM_SK_CONFIRM"));
+ elm_object_part_content_set(popup, "button1", btn);
+ evas_object_smart_callback_add(btn, "clicked", _popup_btn_clicked_cb, popup);
+
+ evas_object_show(popup);
+
+ return popup;
+
+ERROR:
+ _E("Failed to create popup");
+
+ _popup_destroy(popup);
+
+ return NULL;
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#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 <aul.h>
+#include <vconf.h>
+#include <signal.h>
+
+#include "starter.h"
+//#include "lock_mgr.h"
+#include "home_mgr.h"
+#include "hw_key.h"
+#include "process_mgr.h"
+#include "util.h"
+#include "status.h"
+
+#define PWLOCK_LITE_PKG_NAME "org.tizen.pwlock-lite"
+
+#define DATA_UNENCRYPTED "unencrypted"
+#define DATA_MOUNTED "mounted"
+#define SD_DATA_ENCRYPTED "encrypted"
+#define SD_CRYPT_META_FILE ".MetaEcfsFile"
+#define MMC_MOUNT_POINT "/opt/storage/sdcard"
+
+
+
+static void _hide_home(void)
+{
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0);
+}
+
+
+
+static void _show_home(void)
+{
+ int show_menu = 0;
+
+ if (status_active_get()->starter_sequence || !show_menu) {
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1);
+ }
+}
+
+
+
+static Eina_Bool _finish_boot_animation(void *data)
+{
+ if (vconf_set_int(VCONFKEY_BOOT_ANIMATION_FINISHED, 1) != 0) {
+ _E("Failed to set boot animation finished set");
+ }
+ _show_home();
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static int _fail_to_launch_pwlock(const char *appid, const char *key, const char *value, void *cfn, void *afn)
+{
+ _finish_boot_animation(NULL);
+ return 0;
+}
+
+
+
+static void _after_launch_pwlock(int pid)
+{
+ process_mgr_set_pwlock_priority(pid);
+ ecore_timer_add(0.5, _finish_boot_animation, NULL);
+}
+
+
+
+static void _signal_handler(int signum, siginfo_t *info, void *unused)
+{
+ _D("_signal_handler : Terminated...");
+ elm_exit();
+}
+
+
+
+static int _power_off_cb(status_active_key_e key, void *data)
+{
+ int val = status_active_get()->sysman_power_off_status;
+
+ if (val == VCONFKEY_SYSMAN_POWER_OFF_DIRECT
+ || val == VCONFKEY_SYSMAN_POWER_OFF_RESTART)
+ {
+ _D("_power_off_cb : Terminated...");
+ elm_exit();
+ }
+
+ return 1;
+}
+
+
+
+#if 0
+static void _data_encryption_cb(keynode_t * node, void *data)
+{
+ char *file = NULL;
+
+ file = vconf_get_str(VCONFKEY_ODE_CRYPTO_STATE);
+ if (!file) {
+ return;
+ }
+
+ _D("get the value : %s", file);
+ if (!strcmp(file, DATA_MOUNTED)) {
+ lock_mgr_daemon_start();
+ home_mgr_init(NULL);
+ }
+ free(file);
+}
+#endif
+
+
+
+static int _set_i18n(const char *domain, const char *dir)
+{
+ char *r = NULL;
+
+ if (domain == NULL) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ char *lang = vconf_get_str(VCONFKEY_LANGSET);
+ r = setlocale(LC_ALL, lang);
+ if (!r) {
+ _E("setlocale() error");
+ }
+ if (lang) {
+ free(lang);
+ }
+
+ r = bindtextdomain(domain, dir);
+ if (!r) {
+ _E("bindtextdomain() error");
+ }
+
+ r = textdomain(domain);
+ if (!r) {
+ _E("textdomain() error");
+ }
+
+ return 0;
+}
+
+
+
+static void _init(struct appdata *ad)
+{
+ 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) {
+ _E("Failed to sigemptyset[%s]", strerror(errno));
+ }
+ ret = sigaddset(&act.sa_mask, SIGTERM);
+ if (ret < 0) {
+ _E("Failed to sigaddset[%s]", strerror(errno));
+ }
+ ret = sigaction(SIGTERM, &act, NULL);
+ if (ret < 0) {
+ _E("Failed to sigaction[%s]", strerror(errno));
+ }
+
+ _set_i18n(PACKAGE, LOCALEDIR);
+
+ status_register();
+ status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL);
+
+ /* Ordering : _hide_home -> process_mgr_must_launch(pwlock) -> _show_home */
+ _hide_home();
+ process_mgr_must_launch(PWLOCK_LITE_PKG_NAME, NULL, NULL, _fail_to_launch_pwlock, _after_launch_pwlock);
+
+#if 0
+ /* Check data encrption */
+ file = vconf_get_str(VCONFKEY_ODE_CRYPTO_STATE);
+ if (file) {
+ _D("get VCONFKEY : %s\n", file);
+ if (strncmp(DATA_UNENCRYPTED, file, strlen(file))) {
+ if (vconf_notify_key_changed(VCONFKEY_ODE_CRYPTO_STATE, _data_encryption_cb, NULL) != 0) {
+ _E("[Error] vconf notify changed is failed: %s", VCONFKEY_ODE_CRYPTO_STATE);
+ } else {
+ _D("waiting mount..!!");
+ free(file);
+ return;
+ }
+ }
+ free(file);
+ }
+#endif
+
+ //lock_mgr_daemon_start();
+ hw_key_create_window();
+ home_mgr_init(NULL);
+}
+
+
+
+static void _fini(struct appdata *ad)
+{
+ home_mgr_fini();
+ hw_key_destroy_window();
+ //lock_mgr_daemon_end();
+
+ status_active_unregister_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb);
+ status_unregister();
+}
+
+
+
+int main(int argc, char *argv[])
+{
+ struct appdata ad;
+
+ _D("starter is launched..!!");
+
+ elm_init(argc, argv);
+ _init(&ad);
+
+ elm_run();
+
+ _fini(&ad);
+ elm_shutdown();
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#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 "window_mgr.h"
+#include "util.h"
+#include "lock_pwd_util.h"
+
+#define STR_ATOM_PANEL_SCROLLABLE_STATE "_E_MOVE_PANEL_SCROLLABLE_STATE"
+
+
+
+struct _lockw_data {
+ Eina_Bool is_registered;
+ Ecore_X_Window lock_x_window;
+
+ Ecore_Event_Handler *h_wincreate;
+ Ecore_Event_Handler *h_winshow;
+ Ecore_Event_Handler *h_winhide;
+};
+
+
+
+static int _is_on_screen(Ecore_X_Display * dpy, Ecore_X_Window window)
+{
+ Ecore_X_Window root;
+ Window child;
+ Window win;
+
+ 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;
+ unsigned int root_w = 0;
+ unsigned int root_h = 0;
+
+ Eina_Bool ret = FALSE;
+
+ root = ecore_x_window_root_first_get();
+ XGetGeometry(dpy, root, &win, &rel_x, &rel_y, &root_w, &root_h, &border, &depth);
+ _D("root rel_x[%d] rel_y[%d] border[%d] width[%d] height[%d]", rel_x, rel_y, border, root_w, root_h);
+
+ if (XGetGeometry(dpy, window, &win, &rel_x, &rel_y, &width, &height, &border, &depth)) {
+ if (XTranslateCoordinates(dpy, window, root, 0, 0, &abs_x, &abs_y, &child)) {
+ _D("abs_x[%d] abs_y[%d] border[%d] width[%d] height[%d]", abs_x, abs_y, border, width, height);
+ if ((abs_x - border) >= root_w
+ || (abs_y - border) >= root_h
+ || (width + abs_x) <= 0 || (height + abs_y) <= 0)
+ {
+ ret = FALSE;
+ } else {
+ ret = (width == root_w) && (height == root_h);
+ }
+ }
+ }
+
+ 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;
+
+}
+
+
+
+int window_mgr_get_focus_window_pid(void)
+{
+ Ecore_X_Window x_win_focused = 0;
+ int pid = 0;
+ int ret = -1;
+
+ _D("%s, %d", __func__, __LINE__);
+
+ x_win_focused = ecore_x_window_focus_get();
+ ret = ecore_x_netwm_pid_get(x_win_focused, &pid);
+ if(ret != 1) {
+ _E("Can't get pid for focus x window (%x)\n", x_win_focused);
+ return -1;
+ }
+ _D("PID(%d) for focus x window (%x)\n", pid, x_win_focused);
+
+ return pid;
+}
+
+
+
+static void _pwd_transient_set(Ecore_X_Window win, Ecore_X_Window for_win)
+{
+ _W("%p is transient for %p", win, for_win);
+
+ ecore_x_icccm_transient_for_set(win, for_win);
+}
+
+
+
+static void _pwd_transient_unset(Ecore_X_Window xwin)
+{
+ ret_if(!xwin);
+
+ _W("%p is not transient", xwin);
+ ecore_x_icccm_transient_for_unset(xwin);
+}
+
+
+
+Eina_Bool window_mgr_pwd_transient_set(void *data)
+{
+ Evas_Object *pwd_win = NULL;
+ Ecore_X_Window pwd_x_win;
+ lockw_data *lockw = (lockw_data *) data;
+ retv_if(!lockw, EINA_FALSE);
+
+ pwd_win = lock_pwd_util_win_get();
+ retv_if(!pwd_win, EINA_FALSE);
+
+ pwd_x_win = elm_win_xwindow_get(pwd_win);
+ retv_if(!pwd_x_win, EINA_FALSE);
+
+ retv_if(!lockw->lock_x_window, EINA_FALSE);
+
+ /* unset transient */
+ _pwd_transient_unset(lockw->lock_x_window);
+
+ /* set transient */
+ _pwd_transient_set(lockw->lock_x_window, pwd_x_win);
+
+ return EINA_TRUE;
+}
+
+
+
+Eina_Bool window_mgr_set_prop(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;
+ int ret = 0;
+
+ retv_if(!lockw, EINA_FALSE);
+
+ user_window = _get_user_created_window((Window) (e->win));
+
+ ret = ecore_x_netwm_pid_get(user_window, &pid);
+ retv_if(ret != 1, EINA_FALSE);
+
+ _D("Check PID(%d) window. (lock_app_pid : %d)", pid, lock_app_pid);
+
+ if (lock_app_pid == pid) {
+ if (_is_on_screen(ecore_x_display_get(), user_window) == TRUE) {
+ lockw->lock_x_window = user_window;
+ /* window effect : fade in /out */
+ 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);
+
+ /* set transient */
+ if (!window_mgr_pwd_transient_set(lockw)) {
+ _E("Failed to set transient");
+ }
+
+ return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
+
+
+
+Eina_Bool window_mgr_set_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;
+ int ret = 0;
+
+ user_window = _get_user_created_window((Window) (e->win));
+ ret = ecore_x_netwm_pid_get(user_window, &pid);
+ retv_if(ret != 1, EINA_FALSE);
+
+ if (lock_app_pid == pid) {
+ if (_is_on_screen(ecore_x_display_get(), user_window) == TRUE) {
+ Ecore_X_Atom ATOM_WINDOW_EFFECT_ENABLE = 0;
+ unsigned int effect_state = 0;
+
+ ATOM_WINDOW_EFFECT_ENABLE = ecore_x_atom_get("_NET_CM_WINDOW_EFFECT_ENABLE");
+ if (ATOM_WINDOW_EFFECT_ENABLE) {
+ ecore_x_window_prop_card32_set(user_window, ATOM_WINDOW_EFFECT_ENABLE, &effect_state, 1);
+ } else {
+ _E("ecore_x_atom_get() failed");
+ }
+ return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
+
+
+
+void window_mgr_set_scroll_prop(lockw_data *data, int lock_type)
+{
+ lockw_data *lockw = (lockw_data *) data;
+ Ecore_X_Atom ATOM_PANEL_SCROLLABLE_STATE = 0;
+ unsigned int val[3] = { 0, };
+
+ ret_if(!lockw);
+
+ ATOM_PANEL_SCROLLABLE_STATE = ecore_x_atom_get(STR_ATOM_PANEL_SCROLLABLE_STATE);
+ if (lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD ||
+ lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD) {
+ val[0] = 0; // always enable F
+ val[1] = 0; // quickpanel enable F
+ val[2] = 0; // apptray enable F
+ } else {
+ val[0] = 0; // always enable F
+ val[1] = 1; // quickpanel enable T
+ val[2] = 0; // apptray enable F
+ }
+ ecore_x_window_prop_card32_set(lockw->lock_x_window, ATOM_PANEL_SCROLLABLE_STATE, val, 3);
+}
+
+
+
+void window_mgr_register_event(void *data, lockw_data * lockw,
+ Eina_Bool (*create_cb) (void *, int, void *),
+ Eina_Bool (*show_cb) (void *, int, void *),
+ Eina_Bool (*hide_cb) (void *, int, void *))
+{
+ Ecore_X_Window root_window;
+
+ ret_if(!lockw);
+
+ if (lockw->is_registered) {
+ _E("Already register event cb");
+ return;
+ }
+
+ /* For getting window x event */
+ root_window = ecore_x_window_root_first_get();
+ ecore_x_window_client_sniff(root_window);
+
+ 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->h_winhide = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_HIDE, hide_cb, data);
+
+ lockw->is_registered = EINA_TRUE;
+}
+
+
+
+static inline void _unregister_event(lockw_data *lockw)
+{
+ Ecore_X_Window root_window;
+
+ /* unset transient */
+ _pwd_transient_unset(lockw->lock_x_window);
+
+ /* delete getting window x event */
+ root_window = ecore_x_window_root_first_get();
+ ecore_x_window_client_sniff(root_window);
+
+ /* delete window create event handler */
+ if (lockw->h_wincreate) {
+ ecore_event_handler_del(lockw->h_wincreate);
+ lockw->h_wincreate = NULL;
+ }
+ if (lockw->h_winshow) {
+ ecore_event_handler_del(lockw->h_winshow);
+ lockw->h_winshow = NULL;
+ }
+ if (lockw->h_winhide) {
+ ecore_event_handler_del(lockw->h_winhide);
+ lockw->h_winhide = NULL;
+ }
+
+ ecore_x_pointer_ungrab();
+
+ lockw->is_registered = EINA_FALSE;
+}
+
+
+
+void window_mgr_unregister_event(lockw_data *lockw)
+{
+ ret_if(!lockw);
+
+ if (!lockw->is_registered) {
+ _E("event cb is not registered");
+ return;
+ }
+
+ _unregister_event(lockw);
+}
+
+
+
+lockw_data *window_mgr_init(void)
+{
+ lockw_data *lockw = NULL;
+
+ lockw = calloc(1, sizeof(*lockw));
+
+ return lockw;
+}
+
+
+
+void window_mgr_fini(lockw_data *lockw)
+{
+ ret_if(!lockw);
+
+ if (lockw->is_registered) {
+ _unregister_event(lockw);
+ }
+
+ free(lockw);
+}
+
+Evas_Object *window_mgr_pwd_lock_win_create(void)
+{
+ Evas_Object *win = elm_win_add(NULL, "LOCKSCREEN_PWD", ELM_WIN_NOTIFICATION);
+ retv_if(!win, NULL);
+
+ elm_win_alpha_set(win, EINA_TRUE);
+ elm_win_borderless_set(win, EINA_TRUE);
+ elm_win_autodel_set(win, EINA_TRUE);
+ elm_win_role_set(win, "no-dim");
+
+ Ecore_X_Window xwin = elm_win_xwindow_get(win);
+ if (xwin) {
+ ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+ utilx_set_system_notification_level(ecore_x_display_get(), xwin, UTILX_NOTIFICATION_LEVEL_NORMAL);
+ utilx_set_window_opaque_state(ecore_x_display_get(), xwin, UTILX_OPAQUE_STATE_ON);
+
+ Ecore_X_Atom ATOM_PANEL_SCROLLABLE_STATE = ecore_x_atom_get(STR_ATOM_PANEL_SCROLLABLE_STATE);
+ unsigned int val[3] = { 0, };
+
+ ecore_x_window_prop_card32_set(xwin, ATOM_PANEL_SCROLLABLE_STATE, val, 3);
+ }
+
+ return win;
+}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vconf.h>
+#include <pkgmgr-info.h>
+
+#include "package_mgr.h"
+#include "util.h"
+
+
+
+bool package_mgr_exist_app(char *appid)
+{
+ int ret = 0;
+ pkgmgrinfo_appinfo_h handle = NULL;
+
+ ret = pkgmgrinfo_appinfo_get_appinfo(appid, &handle);
+ if (PMINFO_R_OK != ret || NULL == handle) {
+ _SECURE_D("%s doesn't exist in this binary", appid);
+ return false;
+ }
+
+ pkgmgrinfo_appinfo_destroy_appinfo(handle);
+
+ return true;
+}
+
+
+
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <ail.h>
-#include <errno.h>
-#include <Elementary.h>
-#include <Ecore.h>
-#include <Ecore_File.h>
-#include <stdio.h>
-#include <sys/inotify.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include <vconf.h>
-
-#include "pkg_event.h"
-#include "util.h"
-
-
-#define CONF_FILE "/usr/share/install-info/desktop.conf"
-#define BUFSZE 1024
-
-
-extern int errno;
-struct inotify_path
-{
- int wd;
- char *path;
-};
-
-struct desktop_notifier s_desktop_notifier = {
- .number = 0,
- .ifd = 0,
- .handler = NULL,
-};
-
-
-
-struct inotify_path paths[CONF_PATH_NUMBER];
-
-
-static Eina_Bool
-directory_notify(void* data, Ecore_Fd_Handler* fd_handler)
-{
- char *buf;
- ssize_t read_size, len, i = 0;
- int fd;
-
- fd = ecore_main_fd_handler_fd_get(fd_handler);
- _D("There are some modification, ifd [%d]", fd);
- if(fd < 0) {
- _E("Failed to get fd");
- return ECORE_CALLBACK_CANCEL;
- }
-
- if (ioctl(fd, FIONREAD, &read_size) < 0) {
- _E("Failed to get q size");
- return ECORE_CALLBACK_CANCEL;
- }
-
- if (read_size <= 0) {
- _E("Buffer is not ready!!!");
- return ECORE_CALLBACK_RENEW;
- }
-
- buf = malloc(read_size);
- if (!buf) {
- _E("Failed to allocate heap for event handling");
- return ECORE_CALLBACK_RENEW;
- }
-
- len = read(fd, buf, read_size);
- if (len < 0) {
- free(buf);
- return ECORE_CALLBACK_CANCEL;
- }
- buf[read_size - 1] = '\0';
-
- while (i < len) {
- struct inotify_event* event = (struct inotify_event*) &buf[i];
- char *str_potksed = "potksed.";
- char *package = NULL;
- ssize_t idx;
- int nev_name;
-
- nev_name = strlen(event->name) - 1;
- for (idx = 0; nev_name >= 0 && str_potksed[idx]; idx++) {
- if (event->name[nev_name] != str_potksed[idx]) {
- break;
- }
- nev_name --;
- }
-
- if (str_potksed[idx] != '\0' || nev_name < 0) {
- _D("This is not a desktop file : %s", event->name);
- i += sizeof(struct inotify_event) + event->len;
- continue;
- }
-
- package = strdup(event->name);
- break_if(NULL == package);
-
- package[nev_name + 1] = '\0';
- _D("Package : %s", package);
-
- if (event->mask & IN_CLOSE_WRITE || event->mask & IN_MOVED_TO) {
- ail_appinfo_h ai = NULL;
- ail_error_e ret;
-
- ret = ail_get_appinfo(package, &ai);
- if (AIL_ERROR_OK == ret || AIL_ERROR_NO_DATA == ret) {
- if (ai) ail_destroy_appinfo(ai);
-
- if (AIL_ERROR_NO_DATA == ret) {
- if (ail_desktop_add(package) < 0) {
- _D("Failed to add a new package (%s)", event->name);
- }
- } else if (AIL_ERROR_OK == ret) {
- if (ail_desktop_update(package) < 0) {
- _D("Failed to add a new package (%s)", event->name);
- }
- }
- } else {
- _E("Failed to get appinfo");
- }
- } else if (event->mask & IN_DELETE) {
- if (ail_desktop_remove(package) < 0)
- _D("Failed to remove a package (%s)", event->name);
- } else {
- _D("this event is not dealt with inotify");
- }
-
- free(package);
-
- i += sizeof(struct inotify_event) + event->len;
- }
-
- free(buf);
- return ECORE_CALLBACK_RENEW;
-}
-
-
-
-static inline char *_ltrim(char *str)
-{
- retv_if(NULL == str, NULL);
- while (*str && (*str == ' ' || *str == '\t' || *str == '\n')) str ++;
- return str;
-}
-
-
-
-static inline int _rtrim(char *str)
-{
- int len;
-
- retv_if(NULL == str, 0);
-
- len = strlen(str);
- while (--len >= 0 && (str[len] == ' ' || str[len] == '\n' || str[len] == '\t')) {
- str[len] = '\0';
- }
-
- return len;
-}
-
-
-
-static int _retrieve_conf_path(struct inotify_path* paths)
-{
- char *line = NULL;
- FILE *fp;
- size_t size = 0;
- ssize_t read;
- int i = 0;
-
- fp = fopen(CONF_FILE, "r");
- if (NULL == fp) {
- _E(CONF_FILE);
- return -1;
- }
-
- while ((read = getline(&line, &size, fp)) != -1 && i < CONF_PATH_NUMBER - 1) {
- char *begin;
-
- if (size <= 0) break;
-
- begin = _ltrim(line);
- _rtrim(line);
-
- if (*begin == '#' || *begin == '\0') continue;
-
- paths[i].path = strdup(begin);
- i++;
- }
-
- if (line) free(line);
- paths[i].path = NULL;
- fclose(fp);
-
- return i;
-}
-
-
-
-static void _unretrieve_conf_path(struct inotify_path* paths, int number)
-{
- register int i;
-
- for (i = 0; i < number; i ++) {
- if (paths[i].path) {
- free(paths[i].path);
- paths[i].path = NULL;
- }
- }
-}
-
-
-
-void pkg_event_init()
-{
- int wd = 0;
- int i;
-
- s_desktop_notifier.ifd = inotify_init();
- if (s_desktop_notifier.ifd == -1) {
- _E("inotify_init error: %s", strerror(errno));
- return;
- }
-
- s_desktop_notifier.number = _retrieve_conf_path(paths);
-
- for (i = 0; i < CONF_PATH_NUMBER && paths[i].path; i++)
- {
- _D("Configuration file for desktop file monitoring [%s] is added", paths[i].path);
- if (access(paths[i].path, R_OK) != 0)
- {
- ecore_file_mkpath(paths[i].path);
- if (chmod(paths[i].path, 0777) == -1) {
- _E("cannot chmod %s", paths[i].path);
- }
- }
-
- wd = inotify_add_watch(s_desktop_notifier.ifd, paths[i].path, IN_CLOSE_WRITE | IN_MOVED_TO | IN_DELETE);
- if (wd == -1) {
- _E("inotify_add_watch error: %s", strerror(errno));
- close(s_desktop_notifier.ifd);
- return;
- }
-
- paths[i].wd = wd;
- }
-
- s_desktop_notifier.handler = ecore_main_fd_handler_add(s_desktop_notifier.ifd, ECORE_FD_READ, directory_notify, NULL, NULL, NULL);
- if (!s_desktop_notifier.handler) {
- _E("cannot add handler for inotify");
- }
-}
-
-
-
-void pkg_event_fini(void)
-{
- register int i;
-
- if (s_desktop_notifier.handler) {
- ecore_main_fd_handler_del(s_desktop_notifier.handler);
- }
-
- for (i = 0; i < CONF_PATH_NUMBER; i ++) {
- if (paths[i].wd) {
- if (inotify_rm_watch(s_desktop_notifier.ifd, paths[i].wd) < 0) {
- _E("Error: %s", strerror(errno));
- }
- paths[i].wd = 0;
- }
- }
-
- _unretrieve_conf_path(paths, s_desktop_notifier.number);
-
- if (s_desktop_notifier.ifd) {
- close(s_desktop_notifier.ifd);
- s_desktop_notifier.ifd = 0;
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vconf.h>
+#include <aul.h>
+#include <Ecore.h>
+#include <syspopup_caller.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include "process_mgr.h"
+#include "util.h"
+#include "dbus_util.h"
+
+#define LOCKD_VOICE_CALL_PKG_NAME "org.tizen.call"
+#define LOCKD_VIDEO_CALL_PKG_NAME "org.tizen.vtmain"
+
+#define NICE_VALUE_PWLOCK -5
+#define NICE_VALUE_LOCKSCREEN -20
+
+
+
+typedef struct _launch_info_s {
+ char *appid;
+ char *key;
+ char *value;
+ after_func afn;
+ change_func cfn;
+} launch_info_s;
+
+
+
+static int _try_to_launch(const char *appid, const char *key, const char *value, after_func afn)
+{
+ int pid = -1;
+ bundle *b = NULL;
+
+ retv_if(!appid, -1);
+
+ if (key) {
+ b = bundle_create();
+ bundle_add(b, key, value);
+ }
+
+ pid = aul_launch_app(appid, b);
+ if (b) bundle_free(b);
+ if (pid > 0) {
+ _D("Succeed to launch %s", appid);
+ if (afn) afn(pid);
+ }
+
+ return pid;
+}
+
+
+
+static Eina_Bool _must_launch_cb(void *data)
+{
+ launch_info_s *launch_info = data;
+ int pid;
+
+ retv_if(!launch_info, ECORE_CALLBACK_CANCEL);
+
+ pid = _try_to_launch(launch_info->appid, launch_info->key, launch_info->value, launch_info->afn);
+ if (pid > 0) {
+ goto OUT;
+ }
+
+ retv_if(pid == AUL_R_ECOMM, ECORE_CALLBACK_RENEW);
+ retv_if(pid == AUL_R_ETERMINATING, ECORE_CALLBACK_RENEW);
+ if (pid == AUL_R_ERROR) {
+ if (launch_info->cfn
+ && 0 == launch_info->cfn(launch_info->appid, launch_info->key, launch_info->value, (void *) launch_info->cfn, (void *) launch_info->afn))
+ {
+ _D("change func has set the next appid");
+ } else {
+ _E("change func has returned error");
+ }
+ goto OUT;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+
+OUT:
+ free(launch_info->appid);
+ free(launch_info->key);
+ free(launch_info->value);
+ free(launch_info);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+void process_mgr_must_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn)
+{
+ Ecore_Timer *timer = NULL;
+ launch_info_s *launch_info = NULL;
+ int pid = -1;
+
+ _D("Must launch %s", appid);
+
+ pid = _try_to_launch(appid, key, value, afn);
+ if (pid > 0) return;
+
+ _E("Failed the first try to launch %s", appid);
+
+ launch_info = calloc(1, sizeof(launch_info_s));
+ ret_if(!launch_info);
+
+
+ if (appid) launch_info->appid = strdup(appid);
+ if (key) launch_info->key = strdup(key);
+ if (value) launch_info->value = strdup(value);
+ launch_info->cfn = cfn;
+ launch_info->afn = afn;
+
+ timer = ecore_timer_add(0.1f, _must_launch_cb, launch_info);
+ if (!timer) {
+ _E("cannot add a timer for must_launch");
+ free(launch_info->appid);
+ free(launch_info->key);
+ free(launch_info->value);
+ free(launch_info);
+ }
+}
+
+
+
+static int _try_to_open(const char *appid, after_func afn)
+{
+ int pid = -1;
+
+ retv_if(!appid, -1);
+
+ pid = aul_open_app(appid);
+ if (pid > 0) {
+ _D("Succeed to open %s", appid);
+ if (afn) afn(pid);
+ }
+
+ return pid;
+}
+
+
+
+static Eina_Bool _must_open_cb(void *data)
+{
+ launch_info_s *launch_info = data;
+ int pid;
+
+ retv_if(!launch_info, ECORE_CALLBACK_CANCEL);
+
+ pid = _try_to_open(launch_info->appid, launch_info->afn);
+ if (pid > 0) {
+ goto OUT;
+ }
+
+ retv_if(pid == AUL_R_ECOMM, ECORE_CALLBACK_RENEW);
+ retv_if(pid == AUL_R_ETERMINATING, ECORE_CALLBACK_RENEW);
+ if (pid == AUL_R_ERROR) {
+ if (launch_info->cfn && 0 == launch_info->cfn(launch_info->appid, NULL, NULL, launch_info->cfn, launch_info->afn)) {
+ _D("change func has set the next appid");
+ } else {
+ _E("change func has returned error");
+ }
+ goto OUT;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+
+OUT:
+ free(launch_info->appid);
+ free(launch_info);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+void process_mgr_must_open(const char *appid, change_func cfn, after_func afn)
+{
+ Ecore_Timer *timer = NULL;
+ launch_info_s *launch_info = NULL;
+ int pid = -1;
+
+ _D("Must open %s", appid);
+
+ pid = _try_to_open(appid, afn);
+ if (pid > 0) return;
+
+ _E("Failed the first try to open %s", appid);
+
+ launch_info = calloc(1, sizeof(launch_info_s));
+ ret_if(!launch_info);
+
+ if (appid) launch_info->appid = strdup(appid);
+ launch_info->cfn = cfn;
+ launch_info->afn = afn;
+
+ timer = ecore_timer_add(0.1f, _must_open_cb, launch_info);
+ if (!timer) {
+ _E("cannot add a timer for must_launch");
+ free(launch_info->appid);
+ free(launch_info);
+ }
+}
+
+
+
+static int _try_to_syspopup_launch(const char *appid, const char *key, const char *value, after_func afn)
+{
+ int pid = -1;
+ bundle *b = NULL;
+
+ retv_if(!appid, -1);
+
+ if (key) {
+ b = bundle_create();
+ bundle_add(b, key, value);
+ }
+
+ pid = syspopup_launch((char *) appid, b);
+ if (b) bundle_free(b);
+ if (pid > 0) {
+ _D("Succeed to launch %s", appid);
+ if (afn) afn(pid);
+ }
+
+ return pid;
+}
+
+
+
+static Eina_Bool _must_syspopup_launch_cb(void *data)
+{
+ launch_info_s *launch_info = data;
+ int pid;
+
+ retv_if(!launch_info, ECORE_CALLBACK_CANCEL);
+
+ pid = _try_to_syspopup_launch(launch_info->appid, launch_info->key, launch_info->value, launch_info->afn);
+ if (pid > 0) {
+ goto OUT;
+ }
+
+ retv_if(pid == AUL_R_ECOMM, ECORE_CALLBACK_RENEW);
+ retv_if(pid == AUL_R_ETERMINATING, ECORE_CALLBACK_RENEW);
+ if (pid == AUL_R_ERROR) {
+ if (launch_info->cfn
+ && 0 == launch_info->cfn(launch_info->appid, launch_info->key, launch_info->value, launch_info->cfn, launch_info->afn)) {
+ _D("change func has set the next appid");
+ } else {
+ _E("change func has returned error");
+ }
+ goto OUT;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+
+OUT:
+ free(launch_info->appid);
+ free(launch_info->key);
+ free(launch_info->value);
+ free(launch_info);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+void process_mgr_must_syspopup_launch(const char *appid, const char *key, const char *value, change_func cfn, after_func afn)
+{
+ Ecore_Timer *timer = NULL;
+ launch_info_s *launch_info = NULL;
+ int pid = -1;
+
+ _D("Must launch %s", appid);
+
+ pid = _try_to_syspopup_launch(appid, key, value, afn);
+ if (pid > 0) return;
+
+ _E("Failed the first try to launch %s", appid);
+
+ launch_info = calloc(1, sizeof(launch_info_s));
+ ret_if(!launch_info);
+
+ if (appid) launch_info->appid = strdup(appid);
+ if (key) launch_info->key = strdup(key);
+ if (value) launch_info->value = strdup(value);
+ launch_info->cfn = cfn;
+ launch_info->afn = afn;
+
+ timer = ecore_timer_add(0.1f, _must_syspopup_launch_cb, launch_info);
+ if (!timer) {
+ _E("cannot add a timer for must_launch");
+ free(launch_info->appid);
+ free(launch_info->key);
+ free(launch_info->value);
+ free(launch_info);
+ }
+}
+
+
+
+static Eina_Bool _set_lock_priority_cb(void *data)
+{
+ int prio;
+
+ prio = getpriority(PRIO_PROCESS, (pid_t)data);
+ if (prio == NICE_VALUE_LOCKSCREEN) {
+ _D("%s (%d: %d)\n", "setpriority Success", (pid_t)data, prio);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (setpriority(PRIO_PROCESS, (pid_t)data, NICE_VALUE_LOCKSCREEN) < 0 ) {
+ _D("%s\n", strerror(errno));
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+
+static Eina_Bool _set_pwlock_priority_cb(void *data)
+{
+ int prio;
+
+ prio = getpriority(PRIO_PROCESS, (pid_t)data);
+ if (prio == NICE_VALUE_PWLOCK) {
+ _D("%s (%d: %d)\n", "setpriority Success", (pid_t)data, prio);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (setpriority(PRIO_PROCESS, (pid_t)data, NICE_VALUE_PWLOCK) < 0 ) {
+ _D("%s\n", strerror(errno));
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+
+
+int process_mgr_set_lock_priority(int pid)
+{
+ return !ecore_timer_add(1.0f, _set_lock_priority_cb, (void *)pid);
+}
+
+
+
+int process_mgr_set_pwlock_priority(int pid)
+{
+ return !ecore_timer_add(1.0f, _set_pwlock_priority_cb, (void *)pid);
+}
+
+
+
+void process_mgr_terminate_app(int pid, int state)
+{
+ _D("process_mgr_terminate_app, state:%d\n", state);
+
+ if (state == 1) {
+ if (pid != 0) {
+ _D("Terminate Lock app(pid : %d)", pid);
+ aul_terminate_pid(pid);
+ }
+ }
+}
+
+
+
+extern int aul_kill_pid(int pid);
+void process_mgr_kill_app(int pid)
+{
+ _D ("process_mgr_kill_app [pid:%d]..", pid);
+ aul_kill_pid(pid);
+}
+
+
+
+int process_mgr_validate_app(int pid)
+{
+ char buf[BUF_SIZE_128] = {0, };
+
+ /* Check pid is invalid. */
+ if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) {
+ _D("no such pkg by pid %d\n", pid);
+ } else {
+ _SECURE_D("appid = %s, pid = %d\n", buf, pid);
+ if (aul_app_is_running(buf) == TRUE) {
+ _D("%s [pid = %d] is running\n", buf, pid);
+ return TRUE;
+ } else {
+ _SECURE_D("[pid = %d] is exist but %s is not running\n", pid, buf);
+ }
+ }
+
+ return FALSE;
+}
+
+
+
+int process_mgr_validate_call(int pid)
+{
+ char buf[BUF_SIZE_128] = {0, };
+
+ /* Check pid is invalid. */
+ if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) {
+ _D("no such pkg by pid %d", pid);
+ } else {
+ _SECURE_D("appid = %s, pid = %d", buf, pid);
+ if ((!strncmp(buf, LOCKD_VOICE_CALL_PKG_NAME, strlen(buf)))
+ || (!strncmp(buf, LOCKD_VIDEO_CALL_PKG_NAME, strlen(buf)))) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <Elementary.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <poll.h>
-
-#include <aul.h>
-#include <vconf.h>
-#include <heynoti.h>
-#include <signal.h>
-#include <system_info.h>
-
-#include "starter.h"
-#include "starter-util.h"
-#include "x11.h"
-#include "lock-daemon.h"
-#include "lockd-debug.h"
-#include "menu_daemon.h"
-
-#ifndef PACKAGE_NAME
-#define PACKAGE_NAME "org.tizen.starter"
-#endif
-
-#define DEFAULT_THEME "tizen"
-#define PWLOCK_PATH "/usr/apps/org.tizen.pwlock/bin/pwlock"
-#define PWLOCK_PKG_NAME "org.tizen.pwlock"
-#define QP_EMUL_STR "Emulator"
-
-static void lock_menu_screen(void)
-{
- vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0);
-}
-
-static void unlock_menu_screen(void)
-{
- int r;
- int show_menu;
-
- show_menu = 0;
- r = vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &show_menu);
- if (r || !show_menu) {
- vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1);
- }
-}
-
-static void _set_elm_theme(void)
-{
- char *vstr;
- char *theme;
- Elm_Theme *th = NULL;
- vstr = vconf_get_str(VCONFKEY_SETAPPL_WIDGET_THEME_STR);
- if (vstr == NULL)
- theme = DEFAULT_THEME;
- else
- theme = vstr;
-
- th = elm_theme_new();
- _DBG("theme vconf[%s]\n set[%s]\n", vstr, theme);
- elm_theme_set(th, theme);
-
- if (vstr)
- free(vstr);
-}
-
-#define SYSTEM_INFO_KEY_MODEL "http://tizen.org/system/model_name"
-static int _check_emul()
-{
- int is_emul = 0;
- char *info = NULL;
-
- if (system_info_get_platform_string(SYSTEM_INFO_KEY_MODEL, &info) == 0) {
- if (info == NULL) return 0;
- if (!strncmp(QP_EMUL_STR, info, strlen(info))) {
- is_emul = 1;
- }
- }
-
- if (info != NULL) free(info);
-
- return is_emul;
-}
-
-static int _launch_pwlock(void)
-{
- int r;
-
- _DBG("%s", __func__);
-
- if(_check_emul()) {
- _DBG("Emulator => skip pwlock");
- vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1);
- return 0;
- }
-
- r = aul_launch_app(PWLOCK_PKG_NAME, NULL);
- if (r < 0) {
- _ERR("PWLock launch error: error(%d)", r);
- if (r == AUL_R_ETIMEOUT) {
- _DBG("Launch pwlock is failed for AUL_R_ETIMEOUT, again launch pwlock");
- r = aul_launch_app(PWLOCK_PKG_NAME, NULL);
- if (r < 0) {
- _ERR("2'nd PWLock launch error: error(%d)", r);
- return -1;
- } else {
- _DBG("Launch pwlock");
- return 0;
- }
- } else {
- return -1;
- }
- } else {
- _DBG("Launch pwlock");
- return 0;
- }
-}
-
-static void _signal_handler(int signum, siginfo_t *info, void *unused)
-{
- _DBG("_signal_handler : Terminated...");
- elm_exit();
-}
-
-static void _heynoti_event_power_off(void *data)
-{
- _DBG("_heynoti_event_power_off : Terminated...");
- elm_exit();
-}
-
-static Eina_Bool _init_idle(void *data)
-{
- _DBG("%s %d\n", __func__, __LINE__);
- if (_launch_pwlock() < 0) {
- _ERR("launch pwlock error");
- }
- menu_daemon_init(NULL);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static void _lock_state_cb(keynode_t * node, void *data)
-{
- _DBG("%s %d\n", __func__, __LINE__);
- WRITE_FILE_LOG("%s", "Lock state is changed!");
-
- if (_launch_pwlock() < 0) {
- _ERR("launch pwlock error");
- }
- menu_daemon_init(NULL);
- if (vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE,
- _lock_state_cb) != 0) {
- LOCKD_DBG("Fail to unregister");
- }
-}
-
-static void _init(struct appdata *ad)
-{
- int r;
- struct sigaction act;
-
- memset(&act,0x00,sizeof(struct sigaction));
- act.sa_sigaction = _signal_handler;
- act.sa_flags = SA_SIGINFO;
-
- int ret = sigemptyset(&act.sa_mask);
- if (ret < 0) {
- _ERR("Failed to sigemptyset[%s]", strerror(errno));
- }
- ret = sigaddset(&act.sa_mask, SIGTERM);
- if (ret < 0) {
- _ERR("Failed to sigaddset[%s]", strerror(errno));
- }
- ret = sigaction(SIGTERM, &act, NULL);
- if (ret < 0) {
- _ERR("Failed to sigaction[%s]", strerror(errno));
- }
-
- memset(ad, 0, sizeof(struct appdata));
-
- gettimeofday(&ad->tv_start, NULL);
-
- //lock_menu_screen();
- _set_elm_theme();
-
- _DBG("%s %d\n", __func__, __LINE__);
-
- r = start_lock_daemon(TRUE);
- if (r == 1) {
- if (vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE,
- _lock_state_cb, NULL) != 0) {
- _ERR("[Error] vconf notify : lock state");
- ecore_timer_add(1.5, _init_idle, NULL);
- }
- } else {
- if (_launch_pwlock() < 0) {
- _ERR("launch pwlock error");
- }
- menu_daemon_init(NULL);
- }
-}
-
-static void _fini(struct appdata *ad)
-{
- struct timeval tv, res;
-
- if (ad == NULL) {
- fprintf(stderr, "Invalid argument: appdata is NULL\n");
- return;
- }
-
- unlock_menu_screen();
- menu_daemon_fini();
-
- gettimeofday(&tv, NULL);
- timersub(&tv, &ad->tv_start, &res);
- _DBG("Total time: %d.%06d sec\n", (int)res.tv_sec, (int)res.tv_usec);
-}
-
-int main(int argc, char *argv[])
-{
- struct appdata ad;
-
- WRITE_FILE_LOG("%s", "Main function is started in starter");
-
- int heyfd = heynoti_init();
- if (heyfd < 0) {
- _ERR("Failed to heynoti_init[%d]", heyfd);
- return -1;
- }
-
- int ret = heynoti_subscribe(heyfd, "power_off_start", _heynoti_event_power_off, NULL);
- if (ret < 0) {
- _ERR("Failed to heynoti_subscribe[%d]", ret);
- }
- ret = heynoti_attach_handler(heyfd);
- if (ret < 0) {
- _ERR("Failed to heynoti_attach_handler[%d]", ret);
- }
-
- elm_init(argc, argv);
-
- _init(&ad);
-
- elm_run();
-
- _fini(&ad);
-
- elm_shutdown();
-
- return 0;
-}
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vconf.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "status.h"
+#include "util.h"
+
+#define VCONFKEY_REMOTE_LOCK_ISLOCKED "db/private/org.tizen.wfmw/is_locked"
+#define VCONFKEY_IDLE_SCREEN_SAFEMODE "memory/idle-screen/safemode"
+
+
+
+typedef struct cb_info {
+ status_active_cb func;
+ void *data;
+} cb_info_s;
+
+
+
+static struct status_active_s s_status_active = {
+ .list = {NULL, },
+ .setappl_selected_package_name = NULL,
+ .setappl_screen_lock_type_int = -1,
+ .langset = NULL,
+ .pm_state = -1,
+ .starter_sequence = -1,
+ .sysman_power_off_status = -1,
+};
+
+
+
+static struct status_passive_s s_status_passive = {
+ .setup_wizard_state = -1,
+ .wms_wakeup_by_gesture_setting = -1,
+ .setup_wizard_first_boot = -1,
+
+ .pm_key_ignore = -1,
+ .call_state = -1,
+ .idle_lock_state = -1,
+ .setappl_password_attempts_left_int = -1,
+ .remote_lock_islocked = -1,
+ .setappl_psmode = -1,
+ .starter_reserved_apps_status = -1,
+ .setappl_sound_lock_bool = -1,
+ .setappl_motion_activation = -1,
+ .setappl_use_pick_up = -1,
+ .setappl_accessibility_lock_time_int = -1,
+ .idle_screen_safemode = -1,
+ .boot_animation_finished = -1,
+ .setappl_ambient_mode_bool = -1,
+
+ .setappl_3rd_lock_pkg_name_str = NULL,
+};
+
+
+
+status_active_h status_active_get(void)
+{
+ return &s_status_active;
+}
+
+
+
+status_passive_h status_passive_get(void)
+{
+ return &s_status_passive;
+}
+
+
+
+int status_active_register_cb(status_active_key_e key, status_active_cb func, void *data)
+{
+ cb_info_s *info = NULL;
+
+ retv_if(key <= STATUS_ACTIVE_KEY_INVALID, -1);
+ retv_if(key >= STATUS_ACTIVE_KEY_MAX, -1);
+ retv_if(!func, -1);
+
+ info = calloc(1, sizeof(cb_info_s));
+ retv_if(!info, -1);
+
+ info->func = func;
+ info->data = data;
+
+ s_status_active.list[key] = eina_list_append(s_status_active.list[key], info);
+
+ return 0;
+}
+
+
+
+int status_active_unregister_cb(status_active_key_e key, status_active_cb func)
+{
+ const Eina_List *l = NULL;
+ const Eina_List *ln = NULL;
+ cb_info_s *info = NULL;
+
+ retv_if(key <= STATUS_ACTIVE_KEY_INVALID, -1);
+ retv_if(key >= STATUS_ACTIVE_KEY_MAX, -1);
+ retv_if(!func, -1);
+
+ EINA_LIST_FOREACH_SAFE(s_status_active.list[key], l, ln, info) {
+ if (func == info->func) {
+ s_status_active.list[key] = eina_list_remove(s_status_active.list[key], info);
+ free(info);
+ return 0;
+ }
+ }
+
+ _W("We cannot unregister the func. Because the list doesn't have it.");
+
+ return 0;
+}
+
+
+
+static void _status_active_change_cb(keynode_t* node, void *data)
+{
+ const char *key_name = NULL;
+ const Eina_List *l = NULL;
+ cb_info_s *info = NULL;
+
+ ret_if(!node);
+
+ key_name = vconf_keynode_get_name(node);
+ ret_if(!key_name);
+
+ if (!strcmp(key_name, VCONFKEY_PM_STATE)) {
+ s_status_active.pm_state = vconf_keynode_get_int(node);
+ EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_PM_STATE], l, info) {
+ continue_if(!info->func);
+ if (0 == info->func(STATUS_ACTIVE_KEY_PM_STATE, info->data)) break;
+ }
+ } else if (!strcmp(key_name, VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME)) {
+ char *tmp = vconf_keynode_get_str(node);
+ free(s_status_active.setappl_selected_package_name);
+ if (tmp) s_status_active.setappl_selected_package_name = strdup(tmp);
+ else s_status_active.setappl_selected_package_name = NULL;
+ EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME], l, info) {
+ continue_if(!info->func);
+ if (0 == info->func(STATUS_ACTIVE_KEY_SETAPPL_SELECTED_PACKAGE_NAME, info->data)) break;
+ }
+ } else if (!strcmp(key_name, VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT)) {
+ s_status_active.setappl_screen_lock_type_int = vconf_keynode_get_int(node);
+ EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT], l, info) {
+ continue_if(!info->func);
+ if (0 == info->func(STATUS_ACTIVE_KEY_SETAPPL_SCREEN_LOCK_TYPE_INT, info->data)) break;
+ }
+ } else if (!strcmp(key_name, VCONFKEY_STARTER_SEQUENCE)) {
+ s_status_active.starter_sequence = vconf_keynode_get_int(node);
+ EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_STARTER_SEQUENCE], l, info) {
+ continue_if(!info->func);
+ if (0 == info->func(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, info->data)) break;
+ }
+ } else if (!strcmp(key_name, VCONFKEY_SYSMAN_POWER_OFF_STATUS)) {
+ s_status_active.sysman_power_off_status = vconf_keynode_get_int(node);
+ EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS], l, info) {
+ continue_if(!info->func);
+ if (0 == info->func(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, info->data)) break;
+ }
+ } else if (!strcmp(key_name, VCONFKEY_LANGSET)) {
+ char *tmp = vconf_keynode_get_str(node);
+ free(s_status_active.langset);
+ if (tmp) s_status_active.langset = strdup(tmp);
+ else s_status_active.langset = NULL;
+ EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_LANGSET], l, info) {
+ continue_if(!info->func);
+ if (0 == info->func(STATUS_ACTIVE_KEY_LANGSET, info->data)) break;
+ }
+#if 0
+ } else if (!strcmp(key_name, )) {
+ s_status_active. = vconf_keynode_get_int(node);
+ EINA_LIST_FOREACH(s_status_active.list[STATUS_ACTIVE_KEY_], l, info) {
+ continue_if(!info->func);
+ if (0 == info->func(STATUS_ACTIVE_KEY_, info->data)) break;
+ }
+#endif
+ }
+}
+
+
+
+static void _status_passive_change_cb(keynode_t* node, void *data)
+{
+ char *key_name = NULL;
+
+ ret_if(!node);
+
+ key_name = vconf_keynode_get_name(node);
+ ret_if(!key_name);
+
+#ifdef TIZEN_PROFILE_WEARABLE
+ if (!strcmp(key_name, VCONFKEY_SETUP_WIZARD_STATE)) {
+ s_status_passive.setup_wizard_state = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING)) {
+ s_status_passive.wms_wakeup_by_gesture_setting = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_SETUP_WIZARD_FIRST_BOOT)) {
+ s_status_passive.setup_wizard_first_boot = vconf_keynode_get_int(node);
+ } else
+#endif
+ if (!strcmp(key_name, VCONFKEY_PM_KEY_IGNORE)) {
+ s_status_passive.pm_key_ignore = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_CALL_STATE)) {
+ s_status_passive.call_state = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_IDLE_LOCK_STATE)) {
+ s_status_passive.idle_lock_state = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT)) {
+ s_status_passive.setappl_password_attempts_left_int = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_REMOTE_LOCK_ISLOCKED)) {
+ s_status_passive.remote_lock_islocked = vconf_keynode_get_bool(node);
+ } else if (!strcmp(key_name, VCONFKEY_SETAPPL_PSMODE)) {
+ s_status_passive.setappl_psmode = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_STARTER_RESERVED_APPS_STATUS)) {
+ s_status_passive.starter_reserved_apps_status = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_IDLE_SCREEN_SAFEMODE)) {
+ s_status_passive.idle_screen_safemode = vconf_keynode_get_int(node);
+ } else if (!strcmp(key_name, VCONFKEY_BOOT_ANIMATION_FINISHED)) {
+ s_status_passive.boot_animation_finished = vconf_keynode_get_int(node);
+#if 0 //build error
+ } else if (!strcmp(key_name, VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL)) {
+ s_status_passive.setappl_ambient_mode_bool = vconf_keynode_get_int(node);
+#endif
+ } else if (!strcmp(key_name, VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR)) {
+ char *tmp = vconf_keynode_get_str(node);
+ free(s_status_passive.setappl_3rd_lock_pkg_name_str);
+ if (tmp) s_status_passive.setappl_3rd_lock_pkg_name_str = strdup(tmp);
+ else s_status_passive.setappl_3rd_lock_pkg_name_str = NULL;
+#if 0
+ } else if (!strcmp(key_name, )) {
+ s_status_passive. = vconf_keynode_get_int(node);
+#endif
+ }
+}
+
+
+
+int status_register(void)
+{
+ _W("Register every events for Starter");
+
+ /* Active events */
+ if (vconf_notify_key_changed(VCONFKEY_PM_STATE, _status_active_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_PM_STATE);
+ } else if (vconf_get_int(VCONFKEY_PM_STATE, &s_status_active.pm_state) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_PM_STATE);
+ s_status_active.pm_state = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _status_active_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
+ } else if (!(s_status_active.setappl_selected_package_name = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME))) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _status_active_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT);
+ } else if (vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &s_status_active.setappl_screen_lock_type_int) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT);
+ s_status_active.setappl_screen_lock_type_int = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _status_active_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_STARTER_SEQUENCE);
+ } else if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &s_status_active.starter_sequence) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_STARTER_SEQUENCE);
+ s_status_active.starter_sequence = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, _status_active_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SYSMAN_POWER_OFF_STATUS);
+ } else if (vconf_get_int(VCONFKEY_SYSMAN_POWER_OFF_STATUS, &s_status_active.sysman_power_off_status ) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SYSMAN_POWER_OFF_STATUS);
+ s_status_active.sysman_power_off_status = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_LANGSET, _status_active_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_LANGSET);
+ } else if (!(s_status_active.langset = vconf_get_str(VCONFKEY_LANGSET))) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_LANGSET);
+ }
+
+#if 0
+ if (vconf_notify_key_changed(, _status_active_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", );
+ } else if (vconf_get_int(, &s_status_active.) < 0) {
+ _E("Failed to get vconfkey[%s]", );
+ s_status_active. = -1;
+ }
+#endif
+
+ /* Passive events */
+#ifdef TIZEN_PROFILE_WEARABLE
+ if (vconf_notify_key_changed(VCONFKEY_SETUP_WIZARD_STATE, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETUP_WIZARD_STATE);
+ } else if (vconf_get_int(VCONFKEY_SETUP_WIZARD_STATE, &s_status_passive.setup_wizard_state) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETUP_WIZARD_STATE);
+ s_status_passive.setup_wizard_state = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING);
+ } else if (vconf_get_int(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, &s_status_passive.wms_wakeup_by_gesture_setting) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING);
+ s_status_passive.wms_wakeup_by_gesture_setting = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETUP_WIZARD_FIRST_BOOT);
+ } else if (vconf_get_int(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, &s_status_passive.setup_wizard_first_boot) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETUP_WIZARD_FIRST_BOOT);
+ s_status_passive.setup_wizard_first_boot = -1;
+ }
+#endif
+
+ if (vconf_notify_key_changed(VCONFKEY_PM_KEY_IGNORE, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_PM_KEY_IGNORE);
+ } else if (vconf_get_int(VCONFKEY_PM_KEY_IGNORE, &s_status_passive.pm_key_ignore) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_PM_KEY_IGNORE);
+ s_status_passive.pm_key_ignore = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_CALL_STATE, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_CALL_STATE);
+ } else if (vconf_get_int(VCONFKEY_CALL_STATE, &s_status_passive.call_state) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_CALL_STATE);
+ s_status_passive.call_state = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to regsiter add the callback for %s", VCONFKEY_IDLE_LOCK_STATE);
+ } else if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &s_status_passive.idle_lock_state) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_IDLE_LOCK_STATE);
+ s_status_passive.idle_lock_state = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT);
+ } else if (vconf_get_int(VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT, &s_status_passive.setappl_password_attempts_left_int) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT);
+ s_status_passive.setappl_password_attempts_left_int = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_REMOTE_LOCK_ISLOCKED, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_REMOTE_LOCK_ISLOCKED);
+ } else if (vconf_get_bool(VCONFKEY_REMOTE_LOCK_ISLOCKED, &s_status_passive.remote_lock_islocked) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_REMOTE_LOCK_ISLOCKED);
+ s_status_passive.remote_lock_islocked = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_PSMODE);
+ } else if (vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &s_status_passive.setappl_psmode) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_PSMODE);
+ s_status_passive.setappl_psmode = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_STARTER_RESERVED_APPS_STATUS, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_STARTER_RESERVED_APPS_STATUS);
+ } else if (vconf_get_int(VCONFKEY_STARTER_RESERVED_APPS_STATUS, &s_status_passive.starter_reserved_apps_status) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_STARTER_RESERVED_APPS_STATUS);
+ s_status_passive.starter_reserved_apps_status = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_SOUND_LOCK_BOOL);
+ } else if (vconf_get_bool(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, &s_status_passive.setappl_sound_lock_bool) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_SOUND_LOCK_BOOL);
+ s_status_passive.setappl_sound_lock_bool = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_MOTION_ACTIVATION, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to regitster add the callback for %s", VCONFKEY_SETAPPL_MOTION_ACTIVATION);
+ } else if (vconf_get_bool(VCONFKEY_SETAPPL_MOTION_ACTIVATION, &s_status_passive.setappl_motion_activation) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_MOTION_ACTIVATION);
+ s_status_passive.setappl_motion_activation = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_USE_PICK_UP, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to regitster add the callback for %s", VCONFKEY_SETAPPL_USE_PICK_UP);
+ } else if (vconf_get_bool(VCONFKEY_SETAPPL_USE_PICK_UP, &s_status_passive.setappl_use_pick_up) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_USE_PICK_UP);
+ s_status_passive.setappl_use_pick_up = -1;
+ }
+
+#if 0 //build error
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT);
+ } else if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT, &s_status_passive.setappl_accessibility_lock_time_int) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT);
+ s_status_passive.setappl_accessibility_lock_time_int = -1;
+ }
+#endif
+
+ if (vconf_notify_key_changed(VCONFKEY_IDLE_SCREEN_SAFEMODE, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_IDLE_SCREEN_SAFEMODE);
+ } else if (vconf_get_int(VCONFKEY_IDLE_SCREEN_SAFEMODE, &s_status_passive.idle_screen_safemode ) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_IDLE_SCREEN_SAFEMODE);
+ s_status_passive.idle_screen_safemode = -1;
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_BOOT_ANIMATION_FINISHED, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_BOOT_ANIMATION_FINISHED);
+ } else if (vconf_get_int(VCONFKEY_BOOT_ANIMATION_FINISHED, &s_status_passive.boot_animation_finished) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_BOOT_ANIMATION_FINISHED);
+ s_status_passive.boot_animation_finished = -1;
+ }
+
+#if 0 //build error
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL);
+ } else if (vconf_get_int(VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL, &s_status_passive.setappl_ambient_mode_bool) < 0) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL);
+ s_status_passive.boot_animation_finished = -1;
+ }
+#endif
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
+ } else if (!(s_status_passive.setappl_3rd_lock_pkg_name_str = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR))) {
+ _E("Failed to get vconfkey[%s]", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
+ }
+
+#if 0
+ if (vconf_notify_key_changed(, _status_passive_change_cb, NULL) < 0) {
+ _E("Failed to register add the callback for %s", );
+ } else if (vconf_get_int(, &s_status_passive.) < 0) {
+ _E("Failed to get vconfkey[%s]", );
+ s_status_passive. = -1;
+ }
+#endif
+
+ return 0;
+}
+
+
+
+void status_unregister(void)
+{
+ /* Active events */
+ if (vconf_ignore_key_changed(VCONFKEY_PM_STATE, _status_active_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_PM_STATE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _status_active_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME);
+ }
+ free(s_status_active.setappl_selected_package_name);
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, _status_active_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _status_active_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_STARTER_SEQUENCE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SYSMAN_POWER_OFF_STATUS, _status_active_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SYSMAN_POWER_OFF_STATUS);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_LANGSET, _status_active_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_LANGSET);
+ }
+ free(s_status_active.langset);
+
+#if 0
+ if (vconf_ignore_key_changed(, _status_active_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", );
+ }
+#endif
+
+ /* Passive events */
+#ifdef TIZEN_PROFILE_WEARABLE
+ if (vconf_ignore_key_changed(VCONFKEY_SETUP_WIZARD_STATE, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETUP_WIZARD_STATE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_WMS_WAKEUP_BY_GESTURE_SETTING);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETUP_WIZARD_FIRST_BOOT, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETUP_WIZARD_FIRST_BOOT);
+ }
+#endif
+
+ if (vconf_ignore_key_changed(VCONFKEY_PM_KEY_IGNORE, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_PM_KEY_IGNORE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_CALL_STATE, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_CALL_STATE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, _status_passive_change_cb) < 0) {
+ _E("Faield to unregister the callback for %s", VCONFKEY_IDLE_LOCK_STATE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_PASSWORD_ATTEMPTS_LEFT_INT);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_REMOTE_LOCK_ISLOCKED, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_REMOTE_LOCK_ISLOCKED);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_PSMODE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_STARTER_RESERVED_APPS_STATUS, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_STARTER_RESERVED_APPS_STATUS);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_LOCK_BOOL, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_SOUND_LOCK_BOOL);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_MOTION_ACTIVATION, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_MOTION_ACTIVATION);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_USE_PICK_UP, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_USE_PICK_UP);
+ }
+
+#if 0 //build error
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_ACCESSIBILITY_LOCK_TIME_INT);
+ }
+#endif
+
+ if (vconf_ignore_key_changed(VCONFKEY_IDLE_SCREEN_SAFEMODE, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_IDLE_SCREEN_SAFEMODE);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_BOOT_ANIMATION_FINISHED, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_BOOT_ANIMATION_FINISHED);
+ }
+
+#if 0 //build error
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", VCONFKEY_SETAPPL_AMBIENT_MODE_BOOL);
+ }
+#endif
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister ther callback for %s", VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
+ }
+
+#if 0
+ if (vconf_ignore_key_changed(, _status_passive_change_cb) < 0) {
+ _E("Failed to unregister the callback for %s", );
+ }
+#endif
+}
+
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <aul.h>
+#include <Elementary.h>
+#include <vconf.h>
+#include <dd-display.h>
+
+#include "dbus_util.h"
+#include "util.h"
+#include "status.h"
+#include "process_mgr.h"
+
+#define PM_UNLOCK_TIMER_SEC 0.3
+
+
+
+static struct {
+ Eina_List *reserved_apps_list;
+ char *reserved_popup_app_id;
+} s_clock_mgr = {
+ .reserved_apps_list = NULL,
+ .reserved_popup_app_id = NULL,
+};
+
+
+
+static int _check_reserved_popup_status(void)
+{
+ int val = 0;
+ int tmp = 0;
+
+ val = status_passive_get()->starter_reserved_apps_status;
+ tmp = val & 0x10;
+ if(tmp == 0x10){
+ if(aul_app_is_running(s_clock_mgr.reserved_popup_app_id) == 1){
+ return TRUE;
+ } else{
+ _E("%s is not running now.", s_clock_mgr.reserved_popup_app_id);
+ s_clock_mgr.reserved_popup_app_id = NULL;
+ val = val ^ 0x10;
+ vconf_set_int(VCONFKEY_STARTER_RESERVED_APPS_STATUS, val);
+ _W("now reserved apps status %x", val);
+ return FALSE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+
+static int _check_reserved_apps_status(void)
+{
+ int val = 0;
+
+ val = status_passive_get()->starter_reserved_apps_status;
+ _W("Current reserved apps status : %x", val);
+
+ if(val > 0){
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+
+static Eina_Bool _pm_unlock_timer_cb(void *data){
+ /* PM_SLEEP_MARGIN : If the current status is lcd off, deviced reset timer to 1 second. */
+ display_unlock_state(LCD_OFF, PM_SLEEP_MARGIN);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+static void _on_lcd_changed_receive(void *data, DBusMessage *msg)
+{
+ int lcd_off = -1;
+ int setup_wizard_state = -1;
+ int count = 0;
+ char *info = NULL;
+ char *lcd_off_source = NULL;
+ Eina_List *l = NULL;
+
+ lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF);
+
+ if (lcd_off) {
+ /**
+ * lcd off source
+ * string : 'powerkey' or 'timeout' or 'event' or 'unknown'
+ */
+ lcd_off_source = dbus_util_msg_arg_get_str(msg);
+ ret_if(!lcd_off_source);
+
+ _D("lcd off source : %s", lcd_off_source);
+ free(lcd_off_source);
+
+ if (vconf_get_int(VCONFKEY_SETUP_WIZARD_STATE, &setup_wizard_state) < 0) {
+ _E("Failed to get [%s]", VCONFKEY_SETUP_WIZARD_STATE);
+ } else {
+ if (setup_wizard_state == VCONFKEY_SETUP_WIZARD_LOCK) {
+ _E("starter doesn't react for this case, setup wizard state is [%d]", setup_wizard_state);
+ return;
+ }
+ }
+
+ if(_check_reserved_popup_status() > 0){
+ _W("reserved popup is on top. do nothing");
+ return;
+ }
+
+ if (_check_reserved_apps_status() <= 0) {
+ _W("reserved app is not running now.");
+ return;
+ }
+
+ EINA_LIST_FOREACH(s_clock_mgr.reserved_apps_list, l, info){
+ if(aul_app_is_running(info) == 1){
+ // STAY_CUR_STATE : State is not changed directly and phone stay current state until timeout expired.
+ display_lock_state(LCD_OFF, STAY_CUR_STATE, 0);
+ process_mgr_must_open(info, NULL, NULL);
+ ecore_timer_add(PM_UNLOCK_TIMER_SEC, _pm_unlock_timer_cb, NULL);
+ break;
+ } else{
+ _W("%s is not running now", info);
+ s_clock_mgr.reserved_apps_list = eina_list_remove_list(s_clock_mgr.reserved_apps_list, l);
+ continue;
+ }
+ }
+
+ count = eina_list_count(s_clock_mgr.reserved_apps_list);
+ if(count == 0){
+ _W("there is no reserved app.");
+ vconf_set_int(VCONFKEY_STARTER_RESERVED_APPS_STATUS, 0);
+ }
+ }
+
+}
+
+
+
+void clock_mgr_init(void)
+{
+ _W("clock_mgr_init");
+
+ dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL);
+}
+
+
+
+void clock_mgr_fini(void)
+{
+}
+
+
+
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <aul.h>
+#include <dd-deviced.h>
+
+#include "util.h"
+#include "process_mgr.h"
+#include "dbus_util.h"
+#include "status.h"
+
+#define W_HOME_PKGNAME "org.tizen.w-home"
+#define W_CLOCK_VIEWER_PKGNAME "org.tizen.w-clock-viewer"
+
+
+static struct {
+ char *home_appid;
+ int home_pid;
+} s_home_mgr = {
+ .home_appid = W_HOME_PKGNAME,
+ .home_pid = -1,
+};
+
+
+
+static void _after_launch_home(int pid)
+{
+ if (-1 == deviced_conf_set_mempolicy_bypid(pid, OOM_IGNORE)) {
+ _E("Cannot set the memory policy for Homescreen(%d)", pid);
+ } else {
+ _E("Set the memory policy for Homescreen(%d)", pid);
+ }
+ s_home_mgr.home_pid = pid;
+}
+
+
+
+void home_mgr_launch_home(void)
+{
+ process_mgr_must_launch(s_home_mgr.home_appid, NULL, NULL, NULL, _after_launch_home);
+}
+
+
+
+void home_mgr_launch_home_first(void)
+{
+ process_mgr_must_launch(s_home_mgr.home_appid, "home_op", "first_boot", NULL, _after_launch_home);
+}
+
+
+
+void home_mgr_launch_home_by_power(void)
+{
+ process_mgr_must_launch(s_home_mgr.home_appid, "home_op", "powerkey", NULL, _after_launch_home);
+}
+
+
+
+static int _dead_cb(int pid, void *data)
+{
+ _D("_dead_cb is called(pid : %d)", pid);
+
+ if (pid == s_home_mgr.home_pid) {
+ _E("Home(%d) is destroyed.", pid);
+ home_mgr_launch_home();
+ }
+
+ return 0;
+}
+
+
+
+static void _on_lcd_changed_receive(void *data, DBusMessage *msg)
+{
+ int lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF);
+
+ if (lcd_off) {
+ _D("LCD off");
+
+ int ambient_mode = status_passive_get()->setappl_ambient_mode_bool;
+ _D("ambient mode : %d", ambient_mode);
+ if (ambient_mode) {
+ process_mgr_must_launch(W_CLOCK_VIEWER_PKGNAME, NULL, NULL, NULL, NULL);
+ }
+ }
+}
+
+
+
+void home_mgr_init(void)
+{
+ aul_listen_app_dead_signal(_dead_cb, NULL);
+
+ /* register lcd changed cb */
+ dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL);
+}
+
+
+
+void home_mgr_fini(void)
+{
+}
+
+
+
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#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 <errno.h>
+#include <string.h>
+
+#include <vconf.h>
+#include <signal.h>
+#include <app.h>
+#include <alarm.h>
+#include <feedback.h>
+
+#include "util.h"
+
+
+
+static struct {
+ alarm_id_t alarm_id; /* -1 : None, others : set alarm */
+} s_hourly_alert = {
+ .alarm_id = -1,
+};
+
+
+
+static int _alarm_delete_cb(alarm_id_t id, void *user_param)
+{
+ int ret = ALARMMGR_RESULT_SUCCESS;
+
+ ret = alarmmgr_remove_alarm(id);
+ if(ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("alarmmgr_enum_alarm_ids() failed");
+ }
+
+ return 0;
+}
+
+
+
+static void _alarm_unset(void *data)
+{
+ int ret = ALARMMGR_RESULT_SUCCESS;
+
+ if (s_hourly_alert.alarm_id != -1) {
+ _D("try to delete alarm_id(%d)", s_hourly_alert.alarm_id);
+ ret = alarmmgr_remove_alarm(s_hourly_alert.alarm_id);
+ if(ret != ALARMMGR_RESULT_SUCCESS) {
+ ret = alarmmgr_enum_alarm_ids(_alarm_delete_cb, NULL);
+ if(ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("alarmmgr_enum_alarm_ids() failed");
+ }
+ }
+ s_hourly_alert.alarm_id = -1;
+ }
+}
+
+
+
+static int _alarm_set(void *data)
+{
+ int ret = ALARMMGR_RESULT_SUCCESS;
+ time_t current_time;
+ struct tm current_tm;
+ alarm_entry_t *alarm_info = NULL;
+ alarm_id_t alarm_id;
+ alarm_date_t alarm_time;
+
+ /* delete before registering alarm ids */
+ _alarm_unset(NULL);
+
+ time(¤t_time);
+
+ /* alarm revision */
+ current_time += 3600; // +1 hour
+
+ localtime_r(¤t_time, ¤t_tm);
+
+ alarm_info = alarmmgr_create_alarm();
+ if(alarm_info == NULL) {
+ _E("alarmmgr_create_alarm() is failed\n");
+ return -1;
+ }
+
+ alarm_time.year = current_tm.tm_year;
+ alarm_time.month = current_tm.tm_mon;
+ alarm_time.day = current_tm.tm_mday;
+ alarm_time.hour = current_tm.tm_hour;
+ alarm_time.min = 0;
+ alarm_time.sec = 0;
+
+ //alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_ONCE, 0);
+ ret = alarmmgr_set_repeat_mode(alarm_info, ALARM_REPEAT_MODE_REPEAT, 60*60);
+ if(ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("alarmmgr_set_repeat_mode() failed");
+ alarmmgr_free_alarm(alarm_info) ;
+ return -1;
+ }
+ alarmmgr_set_time(alarm_info, alarm_time);
+ alarmmgr_set_type(alarm_info, ALARM_TYPE_VOLATILE);
+
+ ret = alarmmgr_add_alarm_with_localtime(alarm_info, NULL, &alarm_id);
+ if(ret != ALARMMGR_RESULT_SUCCESS) {
+ _E("alarmmgr_add_alarm_with_localtime() failed");
+ alarmmgr_free_alarm(alarm_info) ;
+ return -1;
+ }
+
+ s_hourly_alert.alarm_id = alarm_id;
+ alarmmgr_free_alarm(alarm_info);
+
+ return 0;
+}
+
+
+
+static int _alarm_cb(alarm_id_t alarm_id, void *data)
+{
+ _D("hourly_alert alarm callback called");
+
+ feedback_initialize();
+ feedback_play(FEEDBACK_PATTERN_HOURLY_ALERT);
+ feedback_deinitialize();
+
+ return 0;
+}
+
+
+
+static int _alarm_init(void *data)
+{
+ int ret = 0;
+
+ ret = alarmmgr_init("starter");
+ retv_if(ret<0, -1);
+
+ ret = alarmmgr_set_cb(_alarm_cb, NULL);
+ retv_if(ret<0, -1);
+
+ s_hourly_alert.alarm_id = -1;
+
+ return 0;
+}
+
+static void _alarm_fini(void *data)
+{
+ _alarm_unset(NULL);
+ alarmmgr_fini();
+}
+
+
+
+static Eina_Bool _register_hourly_alert_alarm(void)
+{
+ int ret = 0;
+
+ ret = _alarm_init(NULL);
+ retv_if(ret < 0, EINA_FALSE);
+
+ _alarm_set(NULL);
+
+ return EINA_TRUE;
+
+}
+
+
+
+static int _unregister_hourly_alert_alarm(void)
+{
+ _alarm_fini(NULL);
+ return 0;
+}
+
+
+
+static void _hourly_alert_changed_cb(keynode_t* node, void *data)
+{
+ int hourly_alert = -1;
+
+ _D("%s, %d", __func__, __LINE__);
+
+ if (node) {
+ hourly_alert = vconf_keynode_get_bool(node);
+ } else {
+ if (vconf_get_int(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &hourly_alert) < 0) {
+ _E("Failed to get %s", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL);
+ return;
+ }
+ }
+
+ if (hourly_alert == TRUE) {
+ _E("hourly_alert is set");
+ _register_hourly_alert_alarm();
+ } else {
+ _E("hourly_alert is unset");
+ _unregister_hourly_alert_alarm();
+ }
+
+}
+
+
+
+static void _hourly_system_time_changed_cb(keynode_t *node, void *data)
+{
+ _alarm_set(NULL);
+}
+
+
+
+void hourly_alert_init(void)
+{
+ int hourly_alert = -1;
+ int ret = 0;
+
+ ret = vconf_get_bool(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, &hourly_alert);
+ if (ret < 0){
+ _E("can't get vconfkey value of [%s], ret=[%d]", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, ret);
+ hourly_alert = FALSE;
+ } else if (hourly_alert == TRUE) {
+ _D("[%s] value is [%d], hourly_alert is set..!!", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, hourly_alert);
+ if (_register_hourly_alert_alarm() == EINA_FALSE) {
+ _E("_register_hourly_alert_alarm is failed..!!");
+ }
+ }
+
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, _hourly_alert_changed_cb, NULL) < 0) {
+ _E("Failed to add the callback for %s changed", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL);
+ }
+ /* for time revision */
+ if (vconf_notify_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, _hourly_system_time_changed_cb, NULL) < 0) {
+ _E("Failed to add the callback for %s changed", VCONFKEY_SYSTEM_TIME_CHANGED);
+ }
+}
+
+
+
+void hourly_alert_fini(void)
+{
+ _unregister_hourly_alert_alarm();
+
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL, _hourly_alert_changed_cb) < 0) {
+ _E("Failed to ignore the callback for %s changed", VCONFKEY_SETAPPL_HOURLY_ALERT_BOOL);
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SYSTEM_TIME_CHANGED, _hourly_system_time_changed_cb) < 0) {
+ _E("Failed to ignore the callback for %s changed", VCONFKEY_SYSTEM_TIME_CHANGED);
+ }
+}
+
+
+
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <bundle.h>
+#include <Elementary.h>
+//#include <Ecore_X.h>
+#include <Ecore_Input.h>
+//#include <utilX.h>
+
+#include <dd-display.h>
+#include <feedback.h>
+#include <vconf.h>
+
+#include "hw_key.h"
+#include "util.h"
+#include "status.h"
+#include "dbus_util.h"
+#include "home_mgr.h"
+#include "process_mgr.h"
+
+#define GRAB_TWO_FINGERS 2
+#define POWERKEY_TIMER_SEC 0.25
+#define POWERKEY_LCDOFF_TIMER_SEC 0.4
+#define LONG_PRESS_TIMER_SEC 0.7
+
+#define APP_CONTROL_OPERATION_MAIN_KEY "__APP_SVC_OP_TYPE__"
+#define APP_CONTROL_OPERATION_MAIN_VALUE "http://tizen.org/appcontrol/operation/main"
+
+#define USE_DBUS_POWEROFF 1
+#define W_TASKMGR_PKGNAME "org.tizen.w-taskmanager"
+
+
+
+static struct {
+ //Ecore_X_Window win;
+ Ecore_Event_Handler *key_up;
+ Ecore_Event_Handler *key_down;
+ Ecore_Event_Handler *two_fingers_hold_hd;
+ Ecore_Timer *power_long_press_timer;
+ Ecore_Timer *power_release_timer;
+ Eina_Bool is_lcd_on;
+ Eina_Bool is_long_press;
+ int powerkey_count;
+ Eina_Bool is_cancel;
+} key_info = {
+ //.win = 0x0,
+ .key_up = NULL,
+ .key_down = NULL,
+ .two_fingers_hold_hd = NULL,
+ .power_long_press_timer = NULL,
+ .power_release_timer = NULL,
+ .is_lcd_on = EINA_FALSE,
+ .is_long_press = EINA_FALSE,
+ .powerkey_count = 0,
+ .is_cancel = EINA_FALSE,
+};
+
+
+
+static Eina_Bool _powerkey_timer_cb(void *data)
+{
+ _W("%s, powerkey count[%d]", __func__, key_info.powerkey_count);
+
+ key_info.power_release_timer = NULL;
+
+ if (VCONFKEY_SETUP_WIZARD_LOCK == status_passive_get()->setup_wizard_state) {
+ _E("setdup_wizard is running");
+ key_info.powerkey_count = 0;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (VCONFKEY_PM_KEY_LOCK == status_passive_get()->pm_key_ignore) {
+ _E("Critical Low Batt Clock Mode");
+ key_info.powerkey_count = 0;
+ if(key_info.is_lcd_on) {
+ _W("just turn off LCD");
+ display_change_state(LCD_OFF);
+ } else {
+ _W("just turn on LCD by powerkey.. starter ignore powerkey operation");
+ }
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (key_info.powerkey_count % 2 == 0) {
+ /* double press */
+ _W("powerkey double press");
+ key_info.powerkey_count = 0;
+ return ECORE_CALLBACK_CANCEL;
+ }
+ key_info.powerkey_count = 0;
+
+ if (key_info.is_lcd_on) {
+ if(VCONFKEY_PM_STATE_LCDOFF <= status_active_get()->pm_state) {
+ _E("Already lcd state was changed while powerkey op. starter ignore powerkey operation");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ } else {
+ _W("just turn on LCD by powerkey.. starter ignore powerkey operation");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (VCONFKEY_CALL_VOICE_ACTIVE == status_passive_get()->call_state) {
+ _W("call state is [%d] -> just turn off LCD");
+ display_change_state(LCD_OFF);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (VCONFKEY_IDLE_LOCK == status_passive_get()->idle_lock_state) {
+ _W("lock state is [%d] -> just turn off LCD");
+ display_change_state(LCD_OFF);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (0 < status_passive_get()->remote_lock_islocked) {
+ _W("remote lock is on top (%d), -> just turn off LCD", status_passive_get()->remote_lock_islocked);
+ display_change_state(LCD_OFF);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ home_mgr_launch_home_by_power();
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+static Eina_Bool _long_press_timer_cb(void* data)
+{
+ key_info.power_long_press_timer = NULL;
+ key_info.is_long_press = EINA_TRUE;
+ key_info.powerkey_count = 0;
+
+ if (0 < status_passive_get()->remote_lock_islocked){
+ _W("remote lock is on top (%d), -> just turn off LCD", status_passive_get()->remote_lock_islocked);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (key_info.power_release_timer) {
+ ecore_timer_del(key_info.power_release_timer);
+ key_info.power_release_timer = NULL;
+ _D("delete power_release_timer");
+ }
+
+#if USE_DBUS_POWEROFF
+ dbus_util_send_poweroff_signal();
+#else
+ _D("launch power off syspopup");
+ process_mgr_syspopup_launch("poweroff-syspopup", NULL, NULL, NULL, NULL);
+#endif
+
+ feedback_initialize();
+ feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_HOLD);
+ feedback_deinitialize();
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+#if 0
+static Eina_Bool _key_release_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Up *ev = event;
+
+ retv_if(!ev, ECORE_CALLBACK_RENEW);
+ retv_if(!ev->keyname, ECORE_CALLBACK_RENEW);
+
+ _D("_key_release_cb : %s Released", ev->keyname);
+
+ if (!strcmp(ev->keyname, KEY_POWER)) {
+ _W("POWER Key is released");
+
+ if(key_info.power_long_press_timer) {
+ ecore_timer_del(key_info.power_long_press_timer);
+ key_info.power_long_press_timer = NULL;
+ _D("delete long press timer");
+ }
+
+ // Check powerkey timer
+ if(key_info.power_release_timer) {
+ ecore_timer_del(key_info.power_release_timer);
+ key_info.power_release_timer = NULL;
+ _D("delete powerkey timer");
+ }
+
+ // Cancel key operation
+ if (EINA_TRUE == key_info.is_cancel) {
+ _D("Cancel key is activated");
+ key_info.is_cancel = EINA_FALSE;
+ key_info.powerkey_count = 0; //initialize powerkey count
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ // Check long press operation
+ if(key_info.is_long_press) {
+ _D("ignore power key release by long poress");
+ key_info.is_long_press = EINA_FALSE;
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if(key_info.is_lcd_on) {
+ key_info.power_release_timer = ecore_timer_add(POWERKEY_TIMER_SEC, _powerkey_timer_cb, NULL);
+ } else {
+ _D("lcd off --> [%f]sec timer", POWERKEY_LCDOFF_TIMER_SEC);
+ key_info.power_release_timer = ecore_timer_add(POWERKEY_LCDOFF_TIMER_SEC, _powerkey_timer_cb, NULL);
+ }
+ if (!key_info.power_release_timer) {
+ _E("Critical, cannot add a timer for powerkey");
+ }
+ } else if (!strcmp(ev->keyname, KEY_CANCEL)) {
+ _D("CANCEL Key is released");
+ key_info.is_cancel = EINA_FALSE;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+#endif
+
+
+
+#if 0
+static Eina_Bool _key_press_cb(void *data, int type, void *event)
+{
+ Evas_Event_Key_Down *ev = event;
+
+ retv_if(!ev, ECORE_CALLBACK_RENEW);
+ retv_if(!ev->keyname, ECORE_CALLBACK_RENEW);
+
+ _D("_key_press_cb : %s Pressed", ev->keyname);
+
+ if (!strcmp(ev->keyname, KEY_POWER)) {
+ _W("POWER Key is pressed");
+
+ /**
+ * lcd status
+ * 1 : lcd normal
+ * 2 : lcd dim
+ * 3 : lcd off
+ * 4 : suspend
+ */
+ if (VCONFKEY_PM_STATE_LCDDIM >= status_active_get()->pm_state) {
+ key_info.is_lcd_on = EINA_TRUE;
+ } else if (VCONFKEY_PM_STATE_LCDOFF <= status_active_get()->pm_state) {
+ key_info.is_lcd_on = EINA_FALSE;
+ }
+
+ key_info.powerkey_count++;
+ _W("powerkey count : %d", key_info.powerkey_count);
+
+ if(key_info.power_release_timer) {
+ ecore_timer_del(key_info.power_release_timer);
+ key_info.power_release_timer = NULL;
+ }
+
+ if (key_info.power_long_press_timer) {
+ ecore_timer_del(key_info.power_long_press_timer);
+ key_info.power_long_press_timer = NULL;
+ }
+
+ key_info.is_long_press = EINA_FALSE;
+ key_info.power_long_press_timer = ecore_timer_add(LONG_PRESS_TIMER_SEC, _long_press_timer_cb, NULL);
+ if(!key_info.power_long_press_timer) {
+ _E("Failed to add power_long_press_timer");
+ }
+ } else if (!strcmp(ev->keyname, KEY_CANCEL)) {
+ _D("CANCEL key is pressed");
+ key_info.is_cancel = EINA_TRUE;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+#endif
+
+
+
+#if 0
+static Eina_Bool _w_gesture_hold_cb(void *data, int ev_type, void *ev)
+{
+ Ecore_X_Event_Gesture_Notify_Hold *e = ev;
+
+ if (VCONFKEY_PM_KEY_LOCK == status_passive_get()->pm_key_ignore) {
+ _E("Critical Low Batt Clock Mode, ignore gesture");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if (SETTING_PSMODE_WEARABLE_ENHANCED == status_passive_get()->setappl_psmode) {
+ _E("UPS Mode, ignore gesture");
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if(e->num_fingers == GRAB_TWO_FINGERS) {
+ _D("subtype[%d]: hold[%d]\n", e->subtype, e->hold_time);
+ if (e->subtype == ECORE_X_GESTURE_BEGIN) {
+ _D("Begin : launch task mgr..!!");
+ dbus_util_send_cpu_booster_signal();
+ process_mgr_must_launch(W_TASKMGR_PKGNAME, APP_CONTROL_OPERATION_MAIN_KEY, APP_CONTROL_OPERATION_MAIN_VALUE, NULL, NULL);
+ }
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+#endif
+
+
+
+void hw_key_create_window(void)
+{
+#if 0 //build error
+ int status = -1;
+ int ret = -1;
+
+ _W("hw_key_create_window");
+
+ key_info.win = ecore_x_window_input_new(0, 0, 0, 1, 1);
+ if (!key_info.win) {
+ _E("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, "w_starter,key,receiver");
+ ecore_x_netwm_name_set(key_info.win, "w_starter,key,receiver");
+ ecore_x_netwm_pid_set(key_info.win, getpid());
+
+ ret = utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_POWER, SHARED_GRAB);
+ if (ret != 0) {
+ _E("utilx_grab_key KEY_POWER GrabSHARED_GRAB failed, ret[%d]", ret);
+ }
+
+ key_info.key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL);
+ if (!key_info.key_up) {
+ _E("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) {
+ _E("Failed to register a key down event handler");
+ }
+
+ status = ecore_x_gesture_event_grab(key_info.win, ECORE_X_GESTURE_EVENT_HOLD, GRAB_TWO_FINGERS);
+ _E("ECORE_X_GESTURE_EVENT_HOLD Grab(%d fingers) status[%d]\n", GRAB_TWO_FINGERS, status);
+
+ key_info.two_fingers_hold_hd = ecore_event_handler_add(ECORE_X_EVENT_GESTURE_NOTIFY_HOLD, _w_gesture_hold_cb, NULL);
+ if (!key_info.two_fingers_hold_hd) {
+ _E("Failed to register handler : ECORE_X_EVENT_GESTURE_NOTIFY_TAPNHOLD\n");
+ }
+#endif
+}
+
+
+
+void hw_key_destroy_window(void)
+{
+#if 0 //build error
+ int status;
+
+ if (key_info.two_fingers_hold_hd) {
+ ecore_event_handler_del(key_info.two_fingers_hold_hd);
+ key_info.two_fingers_hold_hd = NULL;
+ }
+
+ status = ecore_x_gesture_event_ungrab(key_info.win, ECORE_X_GESTURE_EVENT_HOLD, GRAB_TWO_FINGERS);
+ if (!status) {
+ _E("ECORE_X_GESTURE_EVENT_HOLD UnGrab(%d fingers) failed, status[%d]\n", GRAB_TWO_FINGERS, status);
+ }
+
+ 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;
+ }
+
+ utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_POWER);
+
+ ecore_x_window_delete_request_send(key_info.win);
+ key_info.win = 0x0;
+#endif
+}
+
+
+
+// End of a file
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#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 <errno.h>
+#include <vconf.h>
+#include <signal.h>
+#include <dd-deviced.h>
+
+#include "hw_key.h"
+#include "util.h"
+#include "hourly_alert.h"
+#include "dbus_util.h"
+#include "clock_mgr.h"
+#include "status.h"
+#include "home_mgr.h"
+#include "process_mgr.h"
+
+#define PWLOCK_PKGNAME "org.tizen.b2-pwlock"
+
+int errno;
+
+
+
+
+static struct {
+ int lcd_status;
+} s_starter = {
+ .lcd_status = -1,
+};
+
+
+
+static void _signal_handler(int signum, siginfo_t *info, void *unused)
+{
+ _D("_signal_handler : Terminated...");
+ elm_exit();
+}
+
+
+
+static int _power_off_cb(status_active_key_e key, void *data)
+{
+ int val = status_active_get()->sysman_power_off_status;
+
+ if (val > VCONFKEY_SYSMAN_POWER_OFF_POPUP) {
+ _E("power off status : %d", val);
+ elm_exit();
+ }
+
+ return 1;
+}
+
+
+
+static int _change_language_cb(status_active_key_e key, void *data)
+{
+ _D("%s, %d", __func__, __LINE__);
+
+ if (status_active_get()->langset) {
+ elm_language_set(status_active_get()->langset);
+ }
+
+ return 1;
+}
+
+
+
+static int _change_sequence_cb(status_active_key_e key, void *data)
+{
+ int seq = status_active_get()->starter_sequence;
+
+ if (seq == 1) {
+ home_mgr_launch_home_first();
+ }
+
+ return 1;
+}
+
+
+
+static void _on_lcd_changed_receive(void *data, DBusMessage *msg)
+{
+ int lcd_on = 0;
+ int lcd_off = 0;
+
+ _D("LCD signal is received");
+
+ lcd_on = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_ON);
+ lcd_off = dbus_message_is_signal(msg, DEVICED_INTERFACE_DISPLAY, MEMBER_LCD_OFF);
+
+ if (lcd_on) {
+ _W("LCD on");
+ s_starter.lcd_status = 1;
+ } else if(lcd_off) {
+ _W("LCD off");
+ s_starter.lcd_status = 0;
+ } else {
+ _E("%s dbus_message_is_signal error", DEVICED_INTERFACE_DISPLAY);
+ }
+}
+
+
+
+static void _init(void)
+{
+ struct sigaction act;
+
+ memset(&act,0x00,sizeof(struct sigaction));
+ act.sa_sigaction = _signal_handler;
+ act.sa_flags = SA_SIGINFO;
+
+ int ret = sigemptyset(&act.sa_mask);
+ if (ret < 0) {
+ _E("Failed to sigemptyset[%s]", strerror(errno));
+ }
+ ret = sigaddset(&act.sa_mask, SIGTERM);
+ if (ret < 0) {
+ _E("Failed to sigaddset[%s]", strerror(errno));
+ }
+ ret = sigaction(SIGTERM, &act, NULL);
+ if (ret < 0) {
+ _E("Failed to sigaction[%s]", strerror(errno));
+ }
+
+ status_register();
+ status_active_register_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb, NULL);
+ status_active_register_cb(STATUS_ACTIVE_KEY_LANGSET, _change_language_cb, NULL);
+
+ if (0 < status_passive_get()->setup_wizard_first_boot) {
+ /* First boot : pwlock > set sequence > home */
+ process_mgr_must_launch(PWLOCK_PKGNAME, NULL, NULL, NULL, NULL);
+ vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0);
+ status_active_register_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _change_sequence_cb, NULL);
+ } else {
+ /* Other : Home > pwlock */
+ home_mgr_launch_home();
+ process_mgr_must_launch(PWLOCK_PKGNAME, NULL, NULL, NULL, NULL);
+ }
+
+ dbus_util_receive_lcd_status(_on_lcd_changed_receive, NULL);
+
+ home_mgr_init();
+ clock_mgr_init();
+ hourly_alert_init();
+ hw_key_create_window();
+}
+
+
+
+static void _fini(void)
+{
+ hw_key_destroy_window();
+ hourly_alert_fini();
+ clock_mgr_fini();
+ home_mgr_fini();
+
+ status_active_unregister_cb(STATUS_ACTIVE_KEY_SYSMAN_POWER_OFF_STATUS, _power_off_cb);
+ status_active_unregister_cb(STATUS_ACTIVE_KEY_LANGSET, _change_language_cb);
+ status_active_unregister_cb(STATUS_ACTIVE_KEY_STARTER_SEQUENCE, _change_sequence_cb);
+ status_unregister();
+}
+
+
+
+int main(int argc, char *argv[])
+{
+ _D("starter is launched..!!");
+
+ elm_init(argc, argv);
+ _init();
+
+ elm_run();
+
+ _fini();
+ elm_shutdown();
+
+ return 0;
+}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifndef WAYLAND
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-#endif
-
-#define DEFAULT_WINDOW_H 1280
-
-void prop_string_set(const char *name, const char *value)
-{
-#ifndef WAYLAND
- 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);
-#endif
-}
-
-void prop_int_set(const char *name, unsigned int val)
-{
-#ifndef WAYLAND
- 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);
-#endif
-}
-
-void set_window_scale(void)
-{
-#ifndef WAYLAND
- 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);
-#endif
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <ail.h>
-#include <aul.h>
-#include <dlog.h>
-#include <Ecore.h>
-
-#ifndef WAYLAND
-#include <Ecore_X.h>
-#endif
-
-#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;
-
-
-#ifndef WAYLAND
-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;
-}
-#endif
-
-
-bool _set_idlescreen_top(void)
-{
-#ifndef WAYLAND
- 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);
- }
-#endif
-
- return true;
-}
-
-
-
-static Eina_Bool _create_cb(void *data, int type, void *event)
-{
-#ifndef WAYLAND
- Ecore_X_Event_Window_Create *info = event;
-
- _D("Create a window[%x]", info->win);
-
- ecore_x_window_client_sniff(info->win);
-#endif
-
- 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)
-{
-#ifndef WAYLAND
- 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);
-#endif
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-
-
-static Eina_Bool _focus_out_cb(void *data, int type, void *event)
-{
-#ifndef WAYLAND
- Ecore_X_Event_Window_Focus_Out *info = event;
-
- _D("Focus out a window[%x]", info->win);
-#endif
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-
-
-static inline void _sniff_all_windows(void)
-{
-#ifndef WAYLAND
- 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);
- }
-#endif
-
- return;
-}
-
-
-
-int xmonitor_init(void)
-{
-#ifndef WAYLAND
- 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;
-#endif
-
- return -EFAULT;
-}
-
-void xmonitor_fini(void)
-{
-#ifndef WAYLAND
- 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;
-#endif
-}
if [ x"$CURRENT_RUNLEVEL" == x"rc3.d" ]; then
while [ ! -f /tmp/.wm_ready ];
do
- sleep 0.1
+ /bin/sleep 0.1
done
fi
/usr/bin/starter &
+
+++ /dev/null
-[Desktop Entry]
-Encoding=UTF-8
-Name=@PROJECT_NAME@
-Exec=@BINDIR@/@PROJECT_NAME@
-Icon=elementary
-Terminal=false
-Type=Application
-Categories=Application;Utility;
-
--- /dev/null
+root starter rw---- ------
+_default_ starter rw---- ------
+starter e17::notification rw---- ------
+starter bt-service::gap rwx-t- ------
+starter tts-server rwx--- ------
+starter aul::terminate --x--- ------
+starter aul::launch --x--- ------
+starter alarm-server::alarm -w---- ------
+starter deviced::haptic rw---- ------
+starter deviced::display rw---- ------
+starter pulseaudio rwxat- ------
+starter system::share rwxat- ------
+starter system::media::root rwxat- ------
+starter system::media rwxat- ------
+starter org.tizen.setting::private rw---- ------
+starter org.tizen.setting::default-resources r-x--- ------
+starter system::homedir rwxat- ------
+starter sys-assert::core rwxat- ------
+starter data-provider-master::bin r----- ------
+starter data-router r----- ------
+starter device::app_logging rw---- ------
+starter device::sys_logging rw---- ------
+starter deviced r----- ------
+starter isf r-x--- ------
+starter starter::vconf rw---l ------
+starter stt-server r----- ------
+starter system::vconf rwxat- ------
+starter system::vconf_inhouse rw---l ------
+starter system::vconf_system r----l ------
+starter system::vconf_setting r----l ------
+starter system::vconf_multimedia r----l ------
+starter starter_private::vconf r----l ------
+starter xorg r----- ------
+starter xorg -w---- ------
+starter pkgmgr::db r----l ------
+starter syspopup::db r----l ------
+starter security-server::api-password-check -w---- ------
+starter org.tizen.wallpaper-ui-service r----- ------
--- /dev/null
+<manifest>
+ <define>
+ <domain name="starter"/>
+ <request>
+ <smack request="sys-assert::core" type="rwxat"/>
+ <smack request="system::homedir" type="rwxat"/>
+ <smack request="system::vconf" type="rwxat"/>
+ <smack request="org.tizen.setting::private" type="rw"/>
+ <smack request="system::media" type="rwxat"/>
+ <smack request="system::media::root" type="rwxat"/>
+ <smack request="system::share" type="rwxat"/>
+ <smack request="pulseaudio" type="rwxat"/>
+ <smack request="deviced::display" type="rw"/>
+ <smack request="deviced::haptic" type="rw"/>
+ <smack request="alarm-server::alarm" type="w"/>
+ <smack request="aul::launch" type="x"/>
+ <smack request="aul::terminate" type="x"/>
+ <smack request="tts-server" type="rwx"/>
+ <smack request="bt-service::gap" type="rwxt"/>
+ <smack request="e17::notification" type="rw"/>
+ </request>
+ <provide>
+ <label name="starter::vconf"/>
+ </provide>
+ </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" />
+ <filesystem path="/usr/share/locale" label="_" exec_label="_" />
+ </assign>
+</manifest>
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <stdio.h>
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-
-int main(int argc, char *argv[])
-{
- unsigned char *prop_ret;
- Atom type_ret;
- unsigned long bytes_after, num_ret;
- int format_ret;
- unsigned int i;
- int num;
-
- Display *d;
- Atom a_ac;
- Atom a_ap;
- Status r;
-
- d = XOpenDisplay(NULL);
- if (d == NULL) {
- printf("Display open error\n");
- return 1;
- }
-
- a_ac = XInternAtom(d, "ENLIGHTENMENT_AUTOCAPITAL_ALLOW", False);
- if (a_ac == None) {
- printf("XInternAtom error\n");
- goto exit;
- }
-
- r = XGetWindowProperty(d, DefaultRootWindow(d), a_ac, 0, 0x7fffffff,
- False, XA_CARDINAL, &type_ret, &format_ret,
- &num_ret, &bytes_after, &prop_ret);
- if (r != Success) {
- printf("XGetWindowProperty error\n");
- goto exit;
- }
-
- if (type_ret == XA_CARDINAL && format_ret == 32 && num_ret > 0
- && prop_ret) {
- printf("Auto capital: %lu\n", ((unsigned long *)prop_ret)[0]);
- }
- if (prop_ret)
- XFree(prop_ret);
-
- a_ap = XInternAtom(d, "ENLIGHTENMENT_AUTOPERIOD_ALLOW", False);
- if (a_ap == None) {
- printf("XInternAtom error\n");
- goto exit;
- }
-
- r = XGetWindowProperty(d, DefaultRootWindow(d), a_ap, 0, 0x7fffffff,
- False, XA_CARDINAL, &type_ret, &format_ret,
- &num_ret, &bytes_after, &prop_ret);
- if (r != Success) {
- printf("XGetWindowProperty error\n");
- goto exit;
- }
-
- if (type_ret == XA_CARDINAL && format_ret == 32 && num_ret > 0
- && prop_ret) {
- printf("Auto period: %lu\n", ((unsigned long *)prop_ret)[0]);
- }
- if (prop_ret)
- XFree(prop_ret);
-
- exit:
- XCloseDisplay(d);
- return 0;
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <stdio.h>
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-
-int main(int argc, char *argv[])
-{
- XTextProperty xtp;
- Display *d;
- Atom a_e17;
- Status r;
-
- d = XOpenDisplay(NULL);
- if (d == NULL) {
- printf("Display open error\n");
- return 1;
- }
-
- a_e17 = XInternAtom(d, "ENLIGHTENMENT_THEME", False);
- if (a_e17 == None) {
- printf("XInternAtom error\n");
- goto exit;
- }
-
- r = XGetTextProperty(d, DefaultRootWindow(d), &xtp, a_e17);
- if (!r) {
- printf("XGetTextProperty error\n");
- goto exit;
- }
-
- printf("THEME: [%s]\n", (char *)xtp.value);
-
- XFree(xtp.value);
-
- exit:
- XCloseDisplay(d);
- return 0;
-}
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <string.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
-
-void set_elm_theme(void)
-{
- char *theme;
- Display *d;
- Atom a_e17;
- Atom a_UTF8;
- XTextProperty xtp;
-
- theme = "beat:kessler";
-
- d = XOpenDisplay(NULL);
- if (d == NULL)
- return;
-
- a_e17 = XInternAtom(d, "ENLIGHTENMENT_THEME", False);
- if (a_e17 == None)
- goto exit;
-
- a_UTF8 = XInternAtom(d, "UTF8_STRING", False);
- if (a_UTF8 == None)
- goto exit;
-
- xtp.value = (unsigned char *)theme;
- xtp.format = 8;
- xtp.encoding = a_UTF8;
- xtp.nitems = strlen(theme);
-
- XSetTextProperty(d, DefaultRootWindow(d), &xtp, a_e17);
-
- exit:
- XCloseDisplay(d);
-}
-
-int main(int argc, char *argv[])
-{
- set_elm_theme();
- return 0;
-}