--- /dev/null
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(sys-lock C)
+
+SET(INSTALL_EXEC_PREFIX "${INSTALL_PREFIX}/bin")
+SET(INSTALL_RESDIR "${INSTALL_PREFIX}/res")
+SET(INSTALL_IMAGEDIR "${INSTALL_RESDIR}/images")
+SET(EDJEDIR "${INSTALL_RESDIR}/edje")
+SET(CMAKE_VERBOSE_MAKEFILE 0)
+
+SET(PROJECT_ROOT_DIR "${CMAKE_SOURCE_DIR}/..")
+SET(PROJECT_RESOURCES_DIR "${PROJECT_ROOT_DIR}/res")
+SET(PROJECT_EDC_DIR "${PROJECT_RESOURCES_DIR}/edje")
+SET(PROJECT_IMAGES_DIR "${PROJECT_RESOURCES_DIR}/images")
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(MENU_PKGS REQUIRED
+ dlog
+ bundle
+ elementary
+ capi-appfw-application
+ capi-appfw-app-manager
+ capi-ui-efl-util
+ feedback
+ capi-base-utils-i18n
+ vconf
+ auth-fw
+ dpm
+ gio-2.0
+ capi-ui-efl-util
+ edbus
+)
+
+FOREACH (flag ${MENU_PKGS_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Winline -g -fno-builtin-malloc -fPIE")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+
+INCLUDE_DIRECTORIES(${PROJECT_ROOT_DIR}/inc)
+
+ADD_EXECUTABLE(${PROJECT_NAME}
+ ${PROJECT_ROOT_DIR}/src/sys_lock.c
+)
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -lm)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${MENU_PKGS_LDFLAGS})
+
+# Install
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${INSTALL_EXEC_PREFIX})
+
+INSTALL(FILES ${PROJECT_ROOT_DIR}/tizen-manifest.xml DESTINATION ${SYS_PACKAGES_DIR} RENAME org.tizen.sys-lock.xml)
+INSTALL(DIRECTORY DESTINATION ${PREFIX}/data)
+INSTALL(FILES ${PROJECT_ROOT_DIR}/shared/res/icon.png DESTINATION ${SYS_ICONS_DIR})
+
+# End of a file
+ADD_SUBDIRECTORY(res)
--- /dev/null
+ADD_SUBDIRECTORY(edje)
+ADD_SUBDIRECTORY(images)
+
--- /dev/null
+ADD_CUSTOM_TARGET(main.edj
+ COMMAND edje_cc -id ${PROJECT_EDC_DIR}/images
+ ${PROJECT_EDC_DIR}/main.edc main.edj
+ DEPENDS ${PROJECT_EDC_DIR}/main.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} main.edj)
+INSTALL(FILES main.edj DESTINATION ${EDJEDIR})
--- /dev/null
+INSTALL(FILES ${PROJECT_IMAGES_DIR}/Home_default.jpg DESTINATION ${INSTALL_IMAGEDIR})
+
--- /dev/null
+Copyright (c) 2009-2014 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
+/*
+ * 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.
+ */
+
+#ifndef __LOG_H__
+#define __LOG_H__
+
+#include <dlog.h>
+#include <app_i18n.h>
+
+/**
+ * @addtogroup Utils
+ * @{
+ */
+
+#ifdef LOG_TAG
+ #undef LOG_TAG
+#endif
+
+#define LOG_TAG "SYSLOCK"
+
+#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
+
+#if !defined(DBG)
+#define DBG(fmt, arg...) dlog_print(DLOG_DEBUG, LOG_TAG, "%s: %s[%d]\t " #fmt "\n", __FILENAME__, __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(WRN)
+#define WRN(fmt, arg...) dlog_print(DLOG_WARN, LOG_TAG, "%s: %s[%d]\t " #fmt "\n", __FILENAME__, __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(ERR)
+#define ERR(fmt, arg...) dlog_print(DLOG_ERROR, LOG_TAG, "%s: %s[%d]\t " #fmt "\n", __FILENAME__, __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(INF)
+#define INF(fmt, arg...) dlog_print(DLOG_INFO, LOG_TAG, "%s: %s[%d]\t " #fmt "\n", __FILENAME__, __func__, __LINE__, ##arg)
+#endif
+
+#if !defined(FATAL)
+#define FAT(fmt, arg...) dlog_print(DLOG_FATAL, LOG_TAG, "%s: %s[%d]\t " #fmt "\n", __FILENAME__, __func__, __LINE__, ##arg);
+#endif
+
+#undef _
+#define _(str) i18n_get_text(str)
+
+/**
+ * @}
+ */
+
+#endif
--- /dev/null
+/*
+ * Copyright (c) 2016 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 _SYSLOCK_H_
+#define _SYSLOCK_H_
+
+#define EDJE_DIR "edje/"
+#define IMAGE_DIR "images/"
+
+#define SYS_LOCK_BUS_NAME "org.tizen.syslock"
+#define SYS_LOCK_OBJECT_PATH "/Org/Tizen/System/Syslock"
+#define SYS_LOCK_INTERFACE_UNLOCK SYS_LOCK_BUS_NAME".unlock"
+#define SYS_LOCK_INTERFACE_TERMINATE SYS_LOCK_BUS_NAME".terminate"
+#define SYS_LOCK_MEMBER_UNLOCK "unlock"
+#define SYS_LOCK_MEMBER_TERMINATE "terminate"
+
+/**
+ * @defgroup Models Models
+ */
+
+/**
+ * @defgroup Views Views
+ */
+
+/**
+ * @defgroup Controllers Controllers
+ */
+
+#define LOCK_EDJE_FILE EDJE_DIR"main.edj"
+
+#endif
--- /dev/null
+<manifest>
+ <request>
+ <domain name="_" />
+ </request>
+</manifest>
--- /dev/null
+Name: org.tizen.sys-lock
+Summary: Sys-lock app
+Group: Applications/Core Applications
+Version: 0.0.1
+Release: 1
+License: Apache-2.0
+Source0: %{name}-%{version}.tar.gz
+
+%if "%{profile}" == "wearable"
+ExcludeArch: %{arm} %ix86 x86_64
+%endif
+
+%if "%{profile}" == "tv"
+ExcludeArch: %{arm} %ix86 x86_64
+%endif
+
+BuildRequires: cmake
+BuildRequires: edje-tools
+BuildRequires: gettext-tools
+BuildRequires: hash-signer
+BuildRequires: pkgconfig(bundle)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-appfw-app-manager)
+BuildRequires: pkgconfig(capi-ui-efl-util)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(feedback)
+BuildRequires: pkgconfig(libtzplatform-config)
+BuildRequires: pkgconfig(capi-base-utils-i18n)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(auth-fw)
+BuildRequires: pkgconfig(dpm)
+BuildRequires: pkgconfig(gio-2.0)
+BuildRequires: pkgconfig(capi-ui-efl-util)
+BuildRequires: pkgconfig(edbus)
+
+%description
+Syslock application for Tizen.
+
+%prep
+%setup -q
+
+%build
+
+%define _pkg_dir %{TZ_SYS_RO_APP}/%{name}
+%define _pkg_shared_dir %{_pkg_dir}/shared
+%define _pkg_data_dir %{_pkg_dir}/data
+%define _sys_icons_dir %{_pkg_shared_dir}/res
+%define _sys_packages_dir %{TZ_SYS_RO_PACKAGES}
+%define _sys_license_dir %{TZ_SYS_SHARE}/license
+
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE"
+export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
+%endif
+
+%ifarch %{arm}
+export CFLAGS="$CFLAGS -DTIZEN_BUILD_TARGET"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_BUILD_TARGET"
+export FFLAGS="$FFLAGS -DTIZEN_BUILD_TARGET"
+%else
+export CFLAGS="$CFLAGS -DTIZEN_BUILD_EMULATOR"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_BUILD_EMULATOR"
+export FFLAGS="$FFLAGS -DTIZEN_BUILD_EMULATOR"
+%endif
+
+
+cd CMake
+cmake . -DINSTALL_PREFIX=%{_pkg_dir} \
+ -DSYS_ICONS_DIR=%{_sys_icons_dir} \
+ -DSYS_PACKAGES_DIR=%{_sys_packages_dir}
+make %{?jobs:-j%jobs}
+cd -
+
+%install
+cd CMake
+%make_install
+cd -
+
+%define tizen_sign 1
+%define tizen_sign_base %{_pkg_dir}
+%define tizen_sign_level public
+%define tizen_author_sign 1
+%define tizen_dist_sign 1
+
+%post
+/sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+%files
+%manifest org.tizen.sys-lock.manifest
+%defattr(-,root,root,-)
+%{_pkg_dir}/bin/sys-lock
+%{_pkg_dir}/res/images/*.jpg
+%{_pkg_dir}/res/edje/*.edj
+%{_sys_packages_dir}/org.tizen.sys-lock.xml
+%{_sys_icons_dir}/icon.png
+%{_pkg_dir}/author-signature.xml
+%{_pkg_dir}/signature1.xml
--- /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 WIN_WIDTH 720
+#define WIN_HEIGHT 1280
+
+#define INDICATOR_HEIGHT 38
+
+collections {
+ base_scale: 2.6;
+
+#include "password.edc"
+ group {
+ name: "lockscreen";
+ parts {
+ part {
+ name: "sw.swipe_layout";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ }
+ description {
+ state: "hidden" 0.0;
+ inherit: "default";
+ visible: 0;
+ }
+ }
+ part {
+ name: "sw.password_layout";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ }
+ }
+ }
+ }
+ group {
+ name: "lockscreen-bg";
+ parts {
+ part {
+ name: "bg_clipper";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part {
+ name: "sw.bg";
+ type: SWALLOW;
+ clip_to: "bg_clipper";
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ }
+ }
+ }
+ }
+}
--- /dev/null
+styles {
+ style {
+ name: "password_style";
+ base: "font=Tizen:style=Regular color=#FFFFFF font_size=50 wrap=none align=center";
+ }
+ style {
+ name: "pass_title_style";
+ base: "font=Tizen:style=Regular color=#FFFFFF font_size=40 wrap=none align=center";
+ }
+ style {
+ name: "pass_subtitle_style";
+ base: "font=Tizen:style=Regular color=#FFFFFF font_size=30 wrap=none align=center";
+ }
+ style {
+ name: "close_style";
+ base: "font=Tizen:style=Regular color=#FFFFFF font_size=35 wrap=none align=center";
+ }
+}
+
+group { "base";
+ images {
+ image: "ls_pin_dot.png" COMP;
+ }
+ parts {
+ rect { "event"; scale;
+ desc { "default";
+ min: 240 148;
+ max: 240 148;
+ color: 0 0 0 0;
+ }
+ }
+ }
+}
+
+group { "pin";
+ images {
+ image: "ls_pin_dot.png" COMP;
+ }
+ inherit: "base";
+ parts {
+ rect { "event"; scale;
+ desc { "default";
+ min: 240 148;
+ max: 240 148;
+ color: 0 0 0 0;
+ }
+ }
+ image { "feedback"; scale;
+ repeat;
+ desc { "default";
+ fixed: 1 1;
+ aspect: 1.0 1.0;
+ min: 128 128;
+ max: 128 128;
+ color: 0 0 0 0;
+ visible: 0;
+ rel1.to: "event";
+ rel2.to: "event";
+ image.normal: "ls_pin_dot.png";
+ }
+ desc { "press";
+ inherit: "default" 0.0;
+ color: 0 0 0 (0.3*255);
+ visible: 1;
+ }
+ desc { "pressed";
+ inherit: "default" 0.0;
+ color: 0 0 0 (0.3*255);
+ min: 256 256;
+ max: 256 256;
+ visible: 1;
+ }
+ }
+ text { "text.number"; scale;
+ effect: FAR_SOFT_SHADOW;
+ repeat;
+ desc { "default";
+ color: 255 255 255 255;
+ color2: 128 128 128 50;
+ color3: 128 128 128 25;
+ text {
+ size: 72;
+ font: "Sans";
+ align: 0.5 0.5;
+ }
+ }
+ }
+ text { "text.letters"; scale;
+ repeat;
+ effect: FAR_SOFT_SHADOW;
+ desc { "default";
+ rel1.relative: 0.0 1.0; rel1.to: "text.number";
+ rel1.offset: 0 -15;
+ color: 255 255 255 255;
+ color2: 128 128 128 50;
+ color3: 128 128 128 25;
+ text {
+ size: 29;
+ font: "Sans";
+ align: 0.5 1.0;
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "mouse,down,1";
+ source: "event";
+ action: STATE_SET "press" 0.0;
+ target: "feedback";
+ after: "press,effect";
+ }
+ program {
+ name: "press,effect";
+ action: STATE_SET "pressed" 0.0;
+ target: "feedback";
+ transition: DECEL 0.2;
+ }
+ program {
+ signal: "mouse,up,1";
+ source: "event";
+ action: STATE_SET "default" 0.0;
+ target: "feedback";
+ transition: DECEL 0.2;
+ }
+ program {
+ signal: "mouse,clicked,1";
+ source: "event";
+ in: 0.1 0;
+ action: SIGNAL_EMIT "button,clicked" "pinpaditem";
+ }
+ }
+}
+group { "clear";
+ images {
+ image: "ls_back_02_nor.png" COMP;
+ image: "ls_back_02_press.png" COMP;
+ }
+ parts {
+ rect { "event";
+ desc { "default";
+ color: 0 0 0 0;
+ }
+ }
+ image { "button"; repeat;
+ desc { "default";
+ align: 0.5 0.5;
+ image.normal: "ls_back_02_nor.png";
+ }
+ desc { "pressed";
+ image.normal: "ls_back_02_press.png";
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "mouse,down,1";
+ source: "event";
+ action: STATE_SET "pressed" 0.0;
+ target: "button";
+ }
+ program {
+ signal: "mouse,up,1";
+ source: "event";
+ action: STATE_SET "default" 0.0;
+ target: "button";
+ }
+ program {
+ signal: "mouse,clicked,1";
+ source: "event";
+ action: SIGNAL_EMIT "button,clicked" "pinpaditem";
+ }
+ }
+}
+
+group { "lock-base";
+ parts {
+ rect { "bg";
+ desc { "default";
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 0 0 0 0;
+ }
+ }
+ spacer { "padding.top"; scale;
+ desc { "default";
+ min: 0 199;
+ max: -1 199;
+ align: 0.5 0;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0; to: "bg"; offset: 0 INDICATOR_HEIGHT; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ swallow { "sw.event"; scale;
+ desc { "default";
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0; to: "padding.top"; }
+ rel2 { relative: 1.0 1.0; to: "padding.top"; }
+ }
+ }
+ textblock { "text.title"; scale;
+ effect: FAR_SOFT_SHADOW;
+ desc { "default";
+ fixed: 1 1;
+ min: 0 54;
+ max: -1 54;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.0; to: "padding.top"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ text {
+ style: "pass_title_style";
+ elipsis: -1.0;
+ }
+ }
+ }
+ textblock { "text.subtitle"; scale;
+ effect: FAR_SOFT_SHADOW;
+ desc { "default";
+ fixed: 1 1;
+ min: 0 40;
+ max: -1 40;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.0; to: "text.title"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ text {
+ style: "pass_subtitle_style";
+ elipsis: -1.0;
+ }
+ }
+ }
+ spacer { "padding.title.entry"; scale;
+ desc { "default";
+ fixed: 1 1;
+ min: 0 84;
+ max: -1 84;
+ align: 0.0 0.0;
+ rel1 { relative: 0.0 1.0; to: "text.title"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ swallow { "sw.entry";
+ desc { "default";
+ fixed: 1 1;
+ min: 0 96;
+ max: -1 96;
+ align: 0.5 0;
+ rel1 { relative: 0.0 1.0; to: "padding.title.entry"; offset: 0 9; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ spacer { "padding.bottom"; scale;
+ desc { "default";
+ min: 0 134;
+ max: -1 134;
+ align: 0 1.0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ swallow { "sw.cancel"; scale;
+ desc { "default";
+ align: 0.9 0.5;
+ fixed: 1 1;
+ min: 155 47;
+ max: 155 47;
+ rel1 { relative: 0.0 0.0; to: "padding.bottom"; }
+ rel2 { relative: 1.0 1.0; to: "padding.bottom"; }
+ }
+ desc { "hidden";
+ inherit: "default";
+ visible: 0;
+ }
+ }
+ program {
+ signal: "btn,cancel,hide";
+ source: "lockscreen";
+ action: STATE_SET "hidden";
+ target: "sw.cancel";
+ }
+ }
+}
+
+group { "lock-simple-password";
+ inherit: "lock-base";
+ parts {
+ table {
+ name: "pinpad";
+ desc { "default";
+ rel1.relative: 0.0 (WIN_HEIGHT-184-592)/WIN_HEIGHT;
+ rel2.relative: 1.0 (WIN_HEIGHT-184)/WIN_HEIGHT;
+ }
+ table {
+ items {
+ #define ITEM(part_name, source_name, x, y) \
+ item { \
+ source: source_name; \
+ name: part_name; \
+ position: x y; \
+ weight: 1.0 1.0; \
+ span: 1 1; \
+ align: -1.0 -1.0; \
+ }
+ ITEM("1", "pin", 1, 1);
+ ITEM("2", "pin", 2, 1);
+ ITEM("3", "pin" ,3, 1);
+ ITEM("4", "pin", 1, 2);
+ ITEM("5", "pin", 2, 2);
+ ITEM("6", "pin", 3, 2);
+ ITEM("7", "pin", 1, 3);
+ ITEM("8", "pin", 2, 3);
+ ITEM("9", "pin", 3, 3);
+ ITEM("clear", "clear", 3, 4);
+ ITEM("0", "pin", 2, 4);
+ ITEM("accept", "base", 1, 4);
+ }
+ }
+ }
+}
+}
--- /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 <stdio.h>
+#include <stdlib.h>
+
+#include <Evas.h>
+#include <Elementary.h>
+#include <Eina.h>
+#include <E_DBus.h>
+
+#include <app.h>
+
+#include "sys_lock.h"
+#include "log.h"
+
+#define STR_PASSWORD "0430"
+static bool isUnlocked = false;
+
+void _dbus_send_sys_lock_unlock_signal(void)
+{
+ int ret = 0;
+ E_DBus_Connection *conn;
+ DBusMessage *msg;
+
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ ERR("e_dbus_bus_get error");
+ }
+
+ msg = dbus_message_new_signal(SYS_LOCK_OBJECT_PATH, SYS_LOCK_INTERFACE_UNLOCK, SYS_LOCK_MEMBER_UNLOCK);
+
+ dbus_message_append_args(msg, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
+
+ e_dbus_message_send(conn, msg, NULL, -1, NULL);
+ dbus_message_unref(msg);
+
+ DBG("%s-%s", SYS_LOCK_INTERFACE_UNLOCK, SYS_LOCK_MEMBER_UNLOCK);
+}
+
+int _dbus_receive_lazy_mount_status(void (*changed_cb)(void *data, DBusMessage *msg), void *data)
+{
+ E_DBus_Connection *conn;
+ E_DBus_Signal_Handler *handler;
+
+ conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+ if (conn == NULL) {
+ ERR("e_dbus_bus_get error");
+ return -1;
+ }
+
+ handler = e_dbus_signal_handler_add(conn, NULL, SYS_LOCK_OBJECT_PATH,
+ SYS_LOCK_INTERFACE_TERMINATE, SYS_LOCK_MEMBER_TERMINATE,
+ changed_cb, data);
+ if (handler == NULL) {
+ ERR("e_dbus_signal_handler_add error");
+ return -1;
+ }
+
+ return 0;
+}
+
+static void _lazy_mount_status_changed_cb(void *data, DBusMessage *msg)
+{
+ int is_unlock = 0;
+
+ DBG("sys-lock signal is received %s : %s", dbus_message_get_interface(msg), dbus_message_get_member(msg));
+
+ is_unlock = dbus_message_is_signal(msg, SYS_LOCK_INTERFACE_TERMINATE, SYS_LOCK_MEMBER_TERMINATE);
+
+ if (is_unlock) {
+ ui_app_exit();
+ }
+}
+
+char *_get_resource_full_path(const char *file_path)
+{
+ char *ret = NULL;
+ char full_path[PATH_MAX] = { 0, };
+ char *res_path = app_get_resource_path();
+
+ if (res_path) {
+ snprintf(full_path, sizeof(full_path) - 1, "%s%s", res_path, file_path);
+
+ ret = strdup(full_path);
+ free(res_path);
+ }
+
+ return ret;
+}
+
+Evas_Object *_window_create(void)
+{
+ Evas_Object *win = elm_win_add(NULL, "FOTALOCK", ELM_WIN_BASIC);
+ char *full_path = NULL;
+
+ if (!win) return NULL;
+
+ elm_win_borderless_set(win, EINA_TRUE);
+ elm_win_autodel_set(win, EINA_TRUE);
+ elm_win_fullscreen_set(win, EINA_TRUE);
+// efl_util_set_window_opaque_state(win, 1);
+
+ Evas_Object *ly = elm_layout_add(win);
+
+ full_path = _get_resource_full_path("edje/main.edj");
+ if (!elm_layout_file_set(ly, full_path, "lockscreen-bg"))
+ ERR("elm_layout_file_set failed %s", full_path);
+ free(full_path);
+
+ evas_object_show(ly);
+ elm_win_resize_object_add(win, ly);
+
+ Evas_Object *bg = elm_image_add(win);
+ elm_image_aspect_fixed_set(bg, EINA_TRUE);
+ elm_image_fill_outside_set(bg, EINA_TRUE);
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ full_path = _get_resource_full_path("images/Home_default.jpg");
+ if (!elm_image_file_set(bg, full_path, NULL)) {
+ ERR("elm_image_file_set failed %s", full_path);
+ }
+ free(full_path);
+
+ evas_object_show(bg);
+ elm_object_part_content_set(ly, "sw.bg", bg);
+
+ evas_object_show(win);
+
+ return win;
+}
+
+static Evas_Object *_conformant_create(Evas_Object *win)
+{
+ Evas_Object *conformant = elm_conformant_add(win);
+ evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_win_resize_object_add(win, conformant);
+
+ elm_object_signal_emit(conformant, "elm,state,indicator,overlap", "elm");
+
+ evas_object_show(conformant);
+ elm_win_conformant_set(win, EINA_TRUE);
+
+ return conformant;
+}
+
+static void
+_pin_button_setup(Evas_Object *ly, int row, int col, const char *text, const char *subtext, Edje_Signal_Cb cb)
+{
+ Evas_Object *edje = elm_layout_edje_get(ly);
+ Evas_Object *child = edje_object_part_table_child_get(edje, "pinpad", col, row);
+ edje_object_part_text_set(child, "text.number", text);
+ edje_object_part_text_set(child, "text.letters", subtext);
+ if (cb) edje_object_signal_callback_add(child, "button,clicked", "pinpaditem", cb, ly);
+}
+
+static void
+_cancel_button_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+ if (isUnlocked) return; //Disable key input after unlocked.
+
+ Evas_Object *entry = elm_object_part_content_get(data, "sw.entry");
+ elm_object_focus_set(entry, EINA_TRUE);
+ elm_entry_entry_set(entry, "");
+// ui_app_exit();
+}
+
+static void
+_pin_button_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ if (isUnlocked) return; //Disable key input after unlocked.
+
+ const char *txt = edje_object_part_text_get(obj, "text.number");
+ Evas_Object *entry = elm_object_part_content_get(data, "sw.entry");
+ elm_object_focus_set(entry, EINA_TRUE);
+ DBG("_pin_button_clicked [%s]", txt);
+
+ elm_entry_entry_append(entry, txt);
+ elm_entry_cursor_next(entry);
+
+ const char* old_entry_text = elm_entry_entry_get(entry);
+
+ if (!strcmp(STR_PASSWORD, old_entry_text)) {
+ _dbus_send_sys_lock_unlock_signal();
+ elm_entry_password_set(entry, EINA_FALSE);
+ elm_entry_text_style_user_push(entry, "DEFAULT='font=Sans style=Regular color=#FF0000 font_size=55 wrap=none align=center'");
+ elm_entry_entry_set(entry, "= Password OK! =");
+ elm_object_focus_set(entry, EINA_FALSE);
+ isUnlocked = true;
+// ui_app_exit();
+ }
+}
+
+static void
+_clear_button_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ if (isUnlocked) return; //Disable key input after unlocked.
+
+ Evas_Object *entry = elm_object_part_content_get(data, "sw.entry");
+ elm_object_focus_set(entry, EINA_TRUE);
+
+ char *new_entry_text;
+ const char* old_entry_text = elm_entry_entry_get(entry);
+ new_entry_text = strdup(old_entry_text);
+
+ if (new_entry_text) {
+ new_entry_text[strlen(old_entry_text) - 1] = '\0';
+ elm_entry_entry_set(entry, new_entry_text);
+ free(new_entry_text);
+ }
+}
+
+static void
+_pin_entry_activated(void *data, Evas_Object *obj, void *event_info)
+{
+ const char *content = elm_entry_entry_get(obj);
+
+ if (!strcmp(STR_PASSWORD, content)) {
+ _dbus_send_sys_lock_unlock_signal();
+ elm_entry_password_set(obj, EINA_FALSE);
+ elm_entry_text_style_user_push(obj, "DEFAULT='font=Sans style=Regular color=#FF0000 font_size=55 wrap=none align=center'");
+ elm_entry_entry_set(obj, "= Password OK! =");
+ elm_object_focus_set(obj, EINA_FALSE);
+ isUnlocked = true;
+// ui_app_exit();
+ }
+}
+
+static Evas_Object *_view_create(Evas_Object *win)
+{
+ char *full_path = NULL;
+ Evas_Object *layout = elm_layout_add(win);
+
+ full_path = _get_resource_full_path("edje/main.edj");
+ if (!elm_layout_file_set(layout, full_path, "lock-simple-password")) {
+ FAT("Failed to set edje file for main view.");
+ return NULL;
+ }
+ free(full_path);
+
+ Evas_Object *btn = elm_button_add(layout);
+ if (!elm_object_style_set(btn, "panel"))
+ ERR("elm_object_style_set failed");
+ elm_object_text_set(btn, _("CANCEL"));
+ evas_object_smart_callback_add(btn, "clicked", _cancel_button_clicked, layout);
+
+ elm_object_part_content_set(layout, "sw.cancel", btn);
+ evas_object_show(btn);
+ evas_object_show(layout);
+
+ Evas_Object *entry = elm_entry_add(layout);
+ elm_entry_password_set(entry, EINA_TRUE);
+ elm_object_part_content_set(layout, "sw.entry", entry);
+ elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+ evas_object_pass_events_set(entry, EINA_TRUE);
+ evas_object_show(entry);
+
+ // Setup PIN pad
+ _pin_button_setup(layout, 1, 1, "1", NULL, _pin_button_clicked);
+ _pin_button_setup(layout, 1, 2, "2", "ABC" , _pin_button_clicked);
+ _pin_button_setup(layout, 1, 3, "3", "DEF" , _pin_button_clicked);
+ _pin_button_setup(layout, 2, 1, "4", "GHI" , _pin_button_clicked);
+ _pin_button_setup(layout, 2, 2, "5", "JKL" , _pin_button_clicked);
+ _pin_button_setup(layout, 2, 3, "6", "MNO" , _pin_button_clicked);
+ _pin_button_setup(layout, 3, 1, "7", "PQRS" , _pin_button_clicked);
+ _pin_button_setup(layout, 3, 2, "8", "TUV" , _pin_button_clicked);
+ _pin_button_setup(layout, 3, 3, "9", "WXYZ" , _pin_button_clicked);
+ _pin_button_setup(layout, 4, 3, NULL, NULL, _clear_button_clicked);
+ _pin_button_setup(layout, 4, 2, "0", NULL , _pin_button_clicked);
+ _pin_button_setup(layout, 4, 1, NULL, NULL , NULL);
+
+ elm_object_signal_emit(layout, "layout,pinpad,show", "lockscreen");
+ elm_entry_text_style_user_push(entry, "DEFAULT='font=Sans style=Regular color=#FFFFFF font_size=110 wrap=none align=center'");
+ evas_object_smart_callback_add(entry, "changed,user", _pin_entry_activated, layout);
+
+ return layout;
+}
+
+static bool _init(void)
+{
+ DBG("_init");
+
+ Evas_Object *win;
+ Evas_Object *conformant;
+ Evas_Object *view;
+
+ win = _window_create();
+ if (!win) {
+ FAT("_window_create failed.");
+ return false;
+ }
+
+ conformant = _conformant_create(win);
+ if (!conformant) {
+ FAT("_conformant_create failed.");
+ return false;
+ }
+
+ view = _view_create(win);
+ if (!view) {
+ FAT("_view_create failed.");
+ return false;
+ }
+
+ elm_object_part_content_set(conformant, NULL, view);
+
+ e_dbus_init();
+ _dbus_receive_lazy_mount_status(_lazy_mount_status_changed_cb, NULL);
+
+ return true;
+}
+
+
+bool _create_app(void *data)
+{
+ DBG("Syslock launch request.");
+ elm_config_scale_set(2.6);
+
+// elm_config_accel_preference_set("opengl");
+ DBG("base scale : %f", elm_app_base_scale_get());
+ DBG("edje scale : %f", edje_scale_get());
+
+ return _init();
+}
+
+void _terminate_app(void *data)
+{
+ DBG("Syslock terminated request.");
+}
+
+void _resume_app(void *data)
+{
+}
+
+void _pause_app(void *data)
+{
+}
+
+EAPI int main(int argc, char *argv[])
+{
+ int ret = 0;
+
+ ui_app_lifecycle_callback_s lifecycle_callback = {0,};
+
+ lifecycle_callback.create = _create_app;
+ lifecycle_callback.terminate = _terminate_app;
+ lifecycle_callback.resume = _resume_app;
+ lifecycle_callback.pause = _pause_app;
+
+ ret = ui_app_main(argc, argv, &lifecycle_callback, NULL);
+ if (ret != APP_ERROR_NONE) {
+ ERR("ui_app_main failed: %s", get_error_message(ret));
+ }
+
+ return ret;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="3.0" package="org.tizen.sys-lock" version="0.1.0">
+ <profile name="mobile"/>
+ <ui-application appid="org.tizen.sys-lock" exec="sys-lock" hw-acceleration="on" launch_mode="single" multiple="false" nodisplay="true" process-pool="true" taskmanage="false" type="capp">
+ <label>sys-lock</label>
+ <icon>icon.png</icon>
+ </ui-application>
+</manifest>