sys-lock initial version 75/84275/6 submit/tizen/20160822.015314
authorJeong Seong-moon <salt.jeong@samsung.com>
Wed, 17 Aug 2016 23:23:26 +0000 (08:23 +0900)
committerJeong Seong-moon <salt.jeong@samsung.com>
Thu, 18 Aug 2016 01:18:23 +0000 (10:18 +0900)
Change-Id: Ib36f9915ea83e48d27c8fe5a68401d72ff0635d7

19 files changed:
.gitignore [new file with mode: 0755]
CMake/CMakeLists.txt [new file with mode: 0755]
CMake/res/CMakeLists.txt [new file with mode: 0755]
CMake/res/edje/CMakeLists.txt [new file with mode: 0755]
CMake/res/images/CMakeLists.txt [new file with mode: 0755]
LICENSE [new file with mode: 0755]
inc/log.h [new file with mode: 0755]
inc/sys_lock.h [new file with mode: 0755]
org.tizen.sys-lock.manifest [new file with mode: 0755]
packaging/org.tizen.sys-lock.spec [new file with mode: 0755]
res/edje/images/ls_back_02_nor.png [new file with mode: 0755]
res/edje/images/ls_back_02_press.png [new file with mode: 0755]
res/edje/images/ls_pin_dot.png [new file with mode: 0755]
res/edje/main.edc [new file with mode: 0755]
res/edje/password.edc [new file with mode: 0755]
res/images/Home_default.jpg [new file with mode: 0755]
shared/res/icon.png [new file with mode: 0755]
src/sys_lock.c [new file with mode: 0755]
tizen-manifest.xml [new file with mode: 0755]

diff --git a/.gitignore b/.gitignore
new file mode 100755 (executable)
index 0000000..98bbc31
--- /dev/null
@@ -0,0 +1 @@
+/Debug
diff --git a/CMake/CMakeLists.txt b/CMake/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..939b393
--- /dev/null
@@ -0,0 +1,58 @@
+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)
diff --git a/CMake/res/CMakeLists.txt b/CMake/res/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..5c520e8
--- /dev/null
@@ -0,0 +1,3 @@
+ADD_SUBDIRECTORY(edje)
+ADD_SUBDIRECTORY(images)
+
diff --git a/CMake/res/edje/CMakeLists.txt b/CMake/res/edje/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..643939c
--- /dev/null
@@ -0,0 +1,7 @@
+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})
diff --git a/CMake/res/images/CMakeLists.txt b/CMake/res/images/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..80a441d
--- /dev/null
@@ -0,0 +1,2 @@
+INSTALL(FILES ${PROJECT_IMAGES_DIR}/Home_default.jpg DESTINATION ${INSTALL_IMAGEDIR})
+
diff --git a/LICENSE b/LICENSE
new file mode 100755 (executable)
index 0000000..3d4a47d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,204 @@
+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.
+
diff --git a/inc/log.h b/inc/log.h
new file mode 100755 (executable)
index 0000000..7f621ba
--- /dev/null
+++ b/inc/log.h
@@ -0,0 +1,63 @@
+/*
+ * 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
diff --git a/inc/sys_lock.h b/inc/sys_lock.h
new file mode 100755 (executable)
index 0000000..8305497
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * 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
diff --git a/org.tizen.sys-lock.manifest b/org.tizen.sys-lock.manifest
new file mode 100755 (executable)
index 0000000..a76fdba
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_" />
+       </request>
+</manifest>
diff --git a/packaging/org.tizen.sys-lock.spec b/packaging/org.tizen.sys-lock.spec
new file mode 100755 (executable)
index 0000000..142e203
--- /dev/null
@@ -0,0 +1,101 @@
+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
diff --git a/res/edje/images/ls_back_02_nor.png b/res/edje/images/ls_back_02_nor.png
new file mode 100755 (executable)
index 0000000..7a8f607
Binary files /dev/null and b/res/edje/images/ls_back_02_nor.png differ
diff --git a/res/edje/images/ls_back_02_press.png b/res/edje/images/ls_back_02_press.png
new file mode 100755 (executable)
index 0000000..7426dfc
Binary files /dev/null and b/res/edje/images/ls_back_02_press.png differ
diff --git a/res/edje/images/ls_pin_dot.png b/res/edje/images/ls_pin_dot.png
new file mode 100755 (executable)
index 0000000..54b6d60
Binary files /dev/null and b/res/edje/images/ls_pin_dot.png differ
diff --git a/res/edje/main.edc b/res/edje/main.edc
new file mode 100755 (executable)
index 0000000..f3bf406
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * 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;
+                               }
+                       }
+               }
+       }
+}
diff --git a/res/edje/password.edc b/res/edje/password.edc
new file mode 100755 (executable)
index 0000000..09146a9
--- /dev/null
@@ -0,0 +1,321 @@
+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);
+                       }
+               }
+       }
+}
+}
diff --git a/res/images/Home_default.jpg b/res/images/Home_default.jpg
new file mode 100755 (executable)
index 0000000..31fe40c
Binary files /dev/null and b/res/images/Home_default.jpg differ
diff --git a/shared/res/icon.png b/shared/res/icon.png
new file mode 100755 (executable)
index 0000000..9765b1b
Binary files /dev/null and b/shared/res/icon.png differ
diff --git a/src/sys_lock.c b/src/sys_lock.c
new file mode 100755 (executable)
index 0000000..e41a257
--- /dev/null
@@ -0,0 +1,371 @@
+/*
+ * 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;
+}
diff --git a/tizen-manifest.xml b/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..e060e3f
--- /dev/null
@@ -0,0 +1,8 @@
+<?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>