diff options
author | Sehong Na <sehong.na@samsung.com> | 2014-05-31 13:00:43 +0900 |
---|---|---|
committer | Sehong Na <sehong.na@samsung.com> | 2014-05-31 13:00:43 +0900 |
commit | 49b40a5d9545c0847889292acf5a8da545e970eb (patch) | |
tree | f524af009437a07e766f9bdba1c48a5aa2a58ec0 /mobile | |
download | starter-49b40a5d9545c0847889292acf5a8da545e970eb.tar.gz starter-49b40a5d9545c0847889292acf5a8da545e970eb.tar.bz2 starter-49b40a5d9545c0847889292acf5a8da545e970eb.zip |
Initialize Tizen 2.3submit/tizen_2.3/20140531.1119222.3a_release
Diffstat (limited to 'mobile')
99 files changed, 7870 insertions, 0 deletions
diff --git a/mobile/AUTHORS b/mobile/AUTHORS new file mode 100644 index 0000000..b7f374a --- /dev/null +++ b/mobile/AUTHORS @@ -0,0 +1,2 @@ +jin yoon <jinny.yoon at samsung dot com> +seungtaek chung <seungtaek.chung at samsung dot com> diff --git a/mobile/CMakeLists.txt b/mobile/CMakeLists.txt new file mode 100755 index 0000000..7d0cd55 --- /dev/null +++ b/mobile/CMakeLists.txt @@ -0,0 +1,101 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(starter C) + +SET(VENDOR "tizen") +SET(PACKAGE ${PROJECT_NAME}) +SET(PKGNAME "org.${VENDOR}.${PACKAGE}") +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(BINDIR "${PREFIX}/bin") +SET(DATADIR "${PREFIX}/share") +SET(LOCALEDIR "${DATADIR}/locale") + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + ail + aul + capi-system-media-key + db-util + dlog + ecore + ecore-evas + ecore-input + ecore-x + eet + eina + elementary + evas + heynoti + sysman + syspopup-caller + utilX + vconf + x11 + xcomposite + xext + appcore-efl + glib-2.0 + ui-gadget-1 + bundle + capi-appfw-application + capi-system-info + pkgmgr-info + libsystemd-daemon +) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2") + +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=${PREFIX}/lib -pie") + +FIND_PROGRAM(UNAME NAMES uname) +EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") +IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") + MESSAGE("add -DTARGET") +ENDIF("${ARCH}" STREQUAL "arm") + +ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"") +ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"") +ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"") +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-D_GNU_SOURCE") + +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") + +ADD_EXECUTABLE(${PROJECT_NAME} + src/hw_key.c + src/pkg_event.c + src/menu_daemon.c + src/starter.c + src/x11.c + src/xmonitor.c + src/lock-daemon.c + src/lockd-debug.c + src/lockd-process-mgr.c + src/lockd-window-mgr.c +) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS}) +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) + +SET(LOCK_SETTING lock-setting) + +ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/${LOCK_SETTING}) + +INSTALL(FILES ${CMAKE_SOURCE_DIR}/starter.rule DESTINATION /opt/etc/smack/accesses.d) + +# install desktop file & icon +#CONFIGURE_FILE(${PROJECT_NAME}.desktop.in ${PROJECT_NAME}.desktop) +#INSTALL(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.desktop DESTINATION share/applications) + +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/systemd/starter.service DESTINATION /usr/lib/systemd/user) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/systemd/starter.socket DESTINATION /usr/lib/systemd/user) +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/systemd/starter.path DESTINATION /usr/lib/systemd/user) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE.Flora DESTINATION /usr/share/license/starter) diff --git a/mobile/LICENSE.Flora b/mobile/LICENSE.Flora new file mode 100644 index 0000000..571fe79 --- /dev/null +++ b/mobile/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.1, April, 2013 + +http://floralicense.org/license/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and +all other entities that control, are controlled by, or are +under common control with that entity. For the purposes of +this definition, "control" means (i) the power, direct or indirect, +to cause the direction or management of such entity, +whether by contract or otherwise, or (ii) ownership of fifty percent (50%) +or more of the outstanding shares, or (iii) beneficial ownership of +such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation source, +and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, +made available under the License, as indicated by a copyright notice +that is included in or attached to the work (an example is provided +in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, +that is based on (or derived from) the Work and for which the editorial +revisions, annotations, elaborations, or other modifications represent, +as a whole, an original work of authorship. For the purposes of this License, +Derivative Works shall not include works that remain separable from, +or merely link (or bind by name) to the interfaces of, the Work and +Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor +for inclusion in the Work by the copyright owner or by an individual or +Legal Entity authorized to submit on behalf of the copyright owner. +For the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Licensor or +its representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor +for the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated +in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Tizen Compliance Specification +and passes the Tizen Compliance Tests as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work +solely as incorporated into a Tizen Certified Platform, where such +license applies only to those patent claims licensable by such +Contributor that are necessarily infringed by their Contribution(s) +alone or by combination of their Contribution(s) with the Work solely +as incorporated into a Tizen Certified Platform to which such +Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim +in a lawsuit) alleging that the Work or a Contribution incorporated +within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that +Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that + You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices + that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "NOTICE" text file as part of its distribution, + then any Derivative Works that You distribute must include a readable + copy of the attribution notices contained within such NOTICE file, + excluding those notices that do not pertain to any part of + the Derivative Works, in at least one of the following places: + within a NOTICE text file distributed as part of the Derivative Works; + within the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the Derivative Works, + if and wherever such third-party notices normally appear. + The contents of the NOTICE file are for informational purposes only + and do not modify the License. You may add Your own attribution notices + within Derivative Works that You distribute, alongside or as an addendum + to the NOTICE text from the Work, provided that such additional attribution + notices cannot be construed as modifying the License. You may add Your own + copyright statement to Your modifications and may provide additional or + different license terms and conditions for use, reproduction, or + distribution of Your modifications, or for any such Derivative Works + as a whole, provided Your use, reproduction, and distribution of + the Work otherwise complies with the conditions stated in this License + and your own copyright statement or terms and conditions do not conflict + the conditions stated in the License including section 3. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Flora License to your work + +To apply the Flora License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Flora License, Version 1.1 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://floralicense.org/license/ + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/mobile/NOTICE b/mobile/NOTICE new file mode 100644 index 0000000..db64ab0 --- /dev/null +++ b/mobile/NOTICE @@ -0,0 +1,3 @@ +Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1.1 +Please, see the LICENSE file for Flora License, Version 1.1 terms and conditions. diff --git a/mobile/include/hw_key.h b/mobile/include/hw_key.h new file mode 100755 index 0000000..42d891d --- /dev/null +++ b/mobile/include/hw_key.h @@ -0,0 +1,22 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +extern void destroy_key_window(void); +extern void create_key_window(void); + +// End of a file diff --git a/mobile/include/lock-daemon.h b/mobile/include/lock-daemon.h new file mode 100755 index 0000000..268d945 --- /dev/null +++ b/mobile/include/lock-daemon.h @@ -0,0 +1,24 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCK_DAEMON_H__ +#define __LOCK_DAEMON_H__ + +int start_lock_daemon(int launch_lock); + +#endif diff --git a/mobile/include/lockd-debug.h b/mobile/include/lockd-debug.h new file mode 100755 index 0000000..07a3835 --- /dev/null +++ b/mobile/include/lockd-debug.h @@ -0,0 +1,64 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCKD_DEBUG_H__ +#define __LOCKD_DEBUG_H__ + +#include <stdio.h> +#include <dlog.h> + +#ifdef LOG_TAG +#undef LOG_TAG +#endif + +#define LOG_TAG "starter" + +#define ENABLE_LOG_SYSTEM + +void lockd_log_t(char *fmt, ...); + +#ifdef ENABLE_LOG_SYSTEM +#define STARTER_ERR(fmt, arg...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##arg) +#define STARTER_DBG(fmt, arg...) LOGD("["LOG_TAG"%s:%d:D] "fmt, __FILE__, __LINE__, ##arg) +#else +#define STARTER_ERR(fmt, arg...) +#define STARTER_DBG(fmt, arg...) +#endif + +#ifdef ENABLE_LOG_SYSTEM +#define _ERR(fmt, arg...) do { STARTER_ERR(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:E] "fmt, __LINE__, ##arg); } while (0) +#define _DBG(fmt, arg...) do { STARTER_DBG(fmt, ##arg); lockd_log_t("["LOG_TAG":%d:D] "fmt, __LINE__, ##arg); } while (0) + +#define LOCKD_ERR(fmt, arg...) _ERR(fmt, ##arg) +#define LOCKD_DBG(fmt, arg...) _DBG(fmt, ##arg) +#else +#define _ERR(...) +#define _DBG(...) + +#define LOCKD_ERR(...) +#define LOCKD_ERR(...) +#endif + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +#endif diff --git a/mobile/include/lockd-process-mgr.h b/mobile/include/lockd-process-mgr.h new file mode 100755 index 0000000..195f73f --- /dev/null +++ b/mobile/include/lockd-process-mgr.h @@ -0,0 +1,38 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCKD_PROCESS_MGR_H__ +#define __LOCKD_PROCESS_MGR_H__ + +int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *), + int phone_lock_state); + +int lockd_process_mgr_restart_lock(int phone_lock_state); + +int lockd_process_mgr_start_phone_lock(void); + +int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *)); + +void lockd_process_mgr_terminate_lock_app(int lock_app_pid, + int state); + +void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid); + +int lockd_process_mgr_check_lock(int pid); + +#endif diff --git a/mobile/include/lockd-window-mgr.h b/mobile/include/lockd-window-mgr.h new file mode 100755 index 0000000..d30ab31 --- /dev/null +++ b/mobile/include/lockd-window-mgr.h @@ -0,0 +1,42 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCKD_WINDOW_MGR_H__ +#define __LOCKD_WINDOW_MGR_H__ + +typedef struct _lockw_data lockw_data; + +Eina_Bool +lockd_window_set_window_property(lockw_data * data, int lock_app_pid, + void *event); + +Eina_Bool +lockd_window_set_window_effect(lockw_data * data, int lock_app_pid, + void *event); + +void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid); + +void +lockd_window_mgr_ready_lock(void *data, lockw_data * lockw, + Eina_Bool(*create_cb) (void *, int, void *), + Eina_Bool(*show_cb) (void *, int, void *)); + +void lockd_window_mgr_finish_lock(lockw_data * lockw); + +lockw_data *lockd_window_init(void); +#endif diff --git a/mobile/include/menu_daemon.h b/mobile/include/menu_daemon.h new file mode 100755 index 0000000..de3e843 --- /dev/null +++ b/mobile/include/menu_daemon.h @@ -0,0 +1,36 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <bundle.h> +#include <sys/types.h> +#include <stdbool.h> + +extern void menu_daemon_init(void *data); +extern void menu_daemon_fini(void); + +extern int menu_daemon_open_app(const char *pkgname); +extern int menu_daemon_launch_app(const char *pkgname, bundle *b); + +extern bool menu_daemon_is_homescreen(pid_t pid); + +extern int menu_daemon_check_dead_signal(int pid); + +extern char *menu_daemon_get_selected_pkgname(void); +extern void menu_daemon_open_homescreen(const char *pkgname); + +// End of a file diff --git a/mobile/include/pkg_event.h b/mobile/include/pkg_event.h new file mode 100755 index 0000000..a9fb2cd --- /dev/null +++ b/mobile/include/pkg_event.h @@ -0,0 +1,46 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __NOTIFIER_H__ +#define __NOTIFIER_H__ +#include <stdbool.h> + +#if !defined(PUBLIC) +#define PUBLIC __attribute__((visibility("default"))) +#endif + +#if !defined(PROTECTED) +#define PROTECTED __attribute__((visibility("hidden"))) +#endif + +#if !defined(PRIVATE) +#define PRIVATE __attribute__((visibility("internal"))) +#endif + + +struct desktop_notifier { + int number; + int ifd; + Ecore_Fd_Handler *handler; +}; + + +PRIVATE void pkg_event_init(void); +PRIVATE void pkg_event_fini(void); + +#endif diff --git a/mobile/include/starter-util.h b/mobile/include/starter-util.h new file mode 100755 index 0000000..117c9a4 --- /dev/null +++ b/mobile/include/starter-util.h @@ -0,0 +1,35 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __STARTER_UTIL_H__ +#define __STARTER_UTIL_H__ + +#include <stdio.h> +#include <sys/time.h> + +#define WRITE_FILE_LOG(fmt, arg...) do { \ + FILE *fp;\ + struct timeval tv; \ + gettimeofday(&tv, NULL); \ + fp = fopen("/var/log/boottime", "a+");\ + if (NULL == fp) break;\ + fprintf(fp, "%u%09u : "fmt"\n", (int) tv.tv_sec, (int) tv.tv_usec, ##arg); \ + fclose(fp);\ +} while (0) + +#endif diff --git a/mobile/include/starter-vconf.h b/mobile/include/starter-vconf.h new file mode 100755 index 0000000..f75bb77 --- /dev/null +++ b/mobile/include/starter-vconf.h @@ -0,0 +1,24 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __STARTER_VCONF_H__ +#define __STARTER_VCONF_H__ + +#define VCONF_PRIVATE_LOCKSCREEN_PKGNAME "file/private/lockscreen/pkgname" + +#endif diff --git a/mobile/include/starter.h b/mobile/include/starter.h new file mode 100755 index 0000000..00ee1e6 --- /dev/null +++ b/mobile/include/starter.h @@ -0,0 +1,28 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __STARTER_H__ +#define __STARTER_H__ + +#include <sys/time.h> + +struct appdata { + struct timeval tv_start; +}; + +#endif diff --git a/mobile/include/util.h b/mobile/include/util.h new file mode 100755 index 0000000..b59d2dc --- /dev/null +++ b/mobile/include/util.h @@ -0,0 +1,97 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __MENU_DAEMON_UTIL_H__ +#define __MENU_DAEMON_UTIL_H__ +#include <dlog.h> +#include <stdio.h> +#include <sys/time.h> + +#define HOME_SCREEN_PKG_NAME "org.tizen.menu-screen" +#define CONF_PATH_NUMBER 1024 + +#ifdef LOG_TAG +#undef LOG_TAG +#define LOG_TAG "starter" +#endif + +/* Log */ +#if !defined(_W) +#define _W(fmt, arg...) LOGW("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#if !defined(_D) +#define _D(fmt, arg...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#if !defined(_E) +#define _E(fmt, arg...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg) +#endif + +#define retv_if(expr, val) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return (val); \ + } \ +} while (0) + +#define ret_if(expr) do { \ + if(expr) { \ + _E("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ +} while (0) + +#define goto_if(expr, val) do { \ + if(expr) { \ + _E("(%s) -> goto", #expr); \ + goto val; \ + } \ +} while (0) + +#define break_if(expr) { \ + if(expr) { \ + _E("(%s) -> break", #expr); \ + break; \ + } \ +} + +#define continue_if(expr) { \ + if(expr) { \ + _E("(%s) -> continue", #expr); \ + continue; \ + } \ +} + +#define PRINT_TIME(str) do { \ + struct timeval tv; \ + gettimeofday(&tv, NULL); \ + _D("[%s:%d] %s TIME=%u.%u", __func__, __LINE__, str, (int)tv.tv_sec, (int)tv.tv_usec); \ +} while (0) + +#define _F(fmt, arg...) do { \ + FILE *fp;\ + fp = fopen("/var/log/starter.log", "a+");\ + if (NULL == fp) break;\ + fprintf(fp, "[%s:%d] "fmt"\n", __func__, __LINE__, ##arg); \ + fclose(fp);\ +} while (0) + + + +#endif /* __MENU_DAEMON_UTIL_H__ */ diff --git a/mobile/include/x11.h b/mobile/include/x11.h new file mode 100755 index 0000000..bad90a4 --- /dev/null +++ b/mobile/include/x11.h @@ -0,0 +1,26 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __STARTER_X11_H__ +#define __STARTER_X11_H__ + +void prop_string_set(const char *name, const char *value); +void prop_int_set(const char *name, unsigned int val); +void set_window_scale(void); + +#endif diff --git a/mobile/include/xmonitor.h b/mobile/include/xmonitor.h new file mode 100755 index 0000000..097e613 --- /dev/null +++ b/mobile/include/xmonitor.h @@ -0,0 +1,25 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __MENU_DAEMON_XMONITOR_H__ +#define __MENU_DAEMON_XMONITOR_H__ + +extern int xmonitor_init(void); +extern void xmonitor_fini(void); + +#endif /* __MENU_DAEMON_XMONITOR_H__ */ diff --git a/mobile/lock-setting/CMakeLists.txt b/mobile/lock-setting/CMakeLists.txt new file mode 100755 index 0000000..7745b83 --- /dev/null +++ b/mobile/lock-setting/CMakeLists.txt @@ -0,0 +1,9 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(lock-setting C) + +ADD_SUBDIRECTORY(lockscreen-options) + +# i18n +ADD_SUBDIRECTORY(po) + +# End of a file diff --git a/mobile/lock-setting/lockscreen-options/CMakeLists.txt b/mobile/lock-setting/lockscreen-options/CMakeLists.txt new file mode 100755 index 0000000..719f98e --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/CMakeLists.txt @@ -0,0 +1,39 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(ug-lockscreen-options C) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}/ug) +SET(LIBDIR "${PREFIX}/lib") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "${PREFIX}/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(IMAGEDIR "${RESDIR}/images") +SET(EDJEDIR "${RESDIR}/edje") +SET(ETCDIR "${RESDIR}/etc") +SET(VERSION 0.1.0) + +SET(SRCS + ./src/lockscreen-options.c + ./src/lockscreen-options-util.c + ./src/lockscreen-options-main.c +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs_lock-screen-options REQUIRED elementary ui-gadget-1 edje evas ail capi-appfw-application) + +FOREACH(flag ${pkgs_lock-screen-options_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + +ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") + +ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.1.0) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_lock-screen-options_LDFLAGS}) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR}) diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options-debug.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-debug.h new file mode 100755 index 0000000..ef9799b --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-debug.h @@ -0,0 +1,48 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCKSCREEN_OPTIONS_DEBUG_H__ +#define __LOCKSCREEN_OPTIONS_DEBUG_H__ + +#include <stdio.h> + +#define OPENLOCK_USING_PLATFORM_DEBUG + +#ifdef OPENLOCK_USING_PLATFORM_DEBUG +#ifndef LOG_TAG +#define LOG_TAG "lockscreen-options" +#endif +#include <dlog.h> + +#define LOCKOPTIONS_DBG(fmt, args...) LOGD("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) +#define LOCKOPTIONS_WARN(fmt, args...) LOGW("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) +#define LOCKOPTIONS_ERR(fmt, args...) LOGE("["LOG_TAG"%s:%d:E] "fmt, __FILE__, __LINE__, ##args) +#else +#define LOCKOPTIONS_DBG(fmt, args...) do{printf("[LOCKOPTIONS_DBG][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); +#define LOCKOPTIONS_WARN(fmt, args...) do{printf("[LOCKOPTIONS_WARN][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); +#define LOCKOPTIONS_ERR(fmt, args...) do{printf("[LOCKOPTIONS_ERR][%s(%d)] "fmt " \n", __FILE__, __LINE__, ##args);}while(0); +#endif + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +#endif diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options-main.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-main.h new file mode 100755 index 0000000..d4c05ec --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-main.h @@ -0,0 +1,28 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCKSCREEN_OPTIONS_MAIN_H__ +#define __LOCKSCREEN_OPTIONS_MAIN_H__ + +#include <Elementary.h> +#include "lockscreen-options.h" + +void lockscreen_options_main_create_view(lockscreen_options_ug_data * ug_data); +void lockscreen_options_main_update_view(); + +#endif diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options-util.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-util.h new file mode 100755 index 0000000..b0ad283 --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/include/lockscreen-options-util.h @@ -0,0 +1,48 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCKSCREEN_OPTIONS_UTIL_H__ +#define __LOCKSCREEN_OPTIONS_UTIL_H__ + +#include <Elementary.h> + +enum { + IDS_COM_SK_OK = 0, + IDS_COM_SK_CANCEL, + IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX, +}; + +enum { + IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS = + IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX, + IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, + IDS_LOCKSCREEN_OPTIONS_CLOCK, + IDS_LOCKSCREEN_OPTIONS_HELPTEXT, + IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, + IDS_LOCKSCREEN_OPTIONS_APP_STRING_MAX, +}; + +Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent); +Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent, + const char *file, + const char *group); +void lockscreen_options_util_create_seperator(Evas_Object * genlist); +void lockscreen_options_util_create_underline(Evas_Object * genlist); +char *lockscreen_optoins_get_string(int id); + +#endif diff --git a/mobile/lock-setting/lockscreen-options/include/lockscreen-options.h b/mobile/lock-setting/lockscreen-options/include/lockscreen-options.h new file mode 100755 index 0000000..37c478d --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/include/lockscreen-options.h @@ -0,0 +1,64 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef __LOCKSCREEN_OPTIONS_H__ +#define __LOCKSCREEN_OPTIONS_H__ + +#include <Elementary.h> +#include <libintl.h> +#include <ui-gadget.h> + +#define PKGNAME "ug-lockscreen-options" + +#define _EDJ(o) elm_layout_edje_get(o) +#define _S(str) dgettext("sys_string", str) +#define _(s) dgettext(PKGNAME, s) +#define dgettext_noop(s) (s) +#define N_(s) dgettext_noop(s) + +enum{ + ENUM_LOCKSCREEN_GENLIST_STYLE_SEPERATOR = 0, + ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, + ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON, + ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, + ENUM_LOCKSCREEN_GENLIST_STYLE_UNDERLINE +}; + +#define LOCKSCREEN_GENLIST_STYLE_SEPERATOR "dialogue/separator/21/with_line" +#define LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON "dialogue/1text.1icon" +#define LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON "dialogue/2text.1icon.6" +#define LOCKSCREEN_GENLIST_STYLE_HELP "multiline/1text" +#define LOCKSCREEN_GENLIST_STYLE_UNDERLINE "dialogue/separator/1/with_line" + + +typedef struct _lockscreen_options_ug_data { + int index; + + Evas_Object *win_main; + Evas_Object *base; + ui_gadget_h ug; + + Evas_Object *navi_bar; + + Elm_Gen_Item_Class itc_separator; + Elm_Gen_Item_Class itc_menu_1text1icon; + Elm_Gen_Item_Class itc_help_1text; + +} lockscreen_options_ug_data; + +#endif diff --git a/mobile/lock-setting/lockscreen-options/src/lockscreen-options-main.c b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-main.c new file mode 100755 index 0000000..2ede565 --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-main.c @@ -0,0 +1,343 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <vconf.h> +#include <vconf-keys.h> +#include <ui-gadget.h> +#include <ui-gadget-module.h> +#include <ail.h> + +#include "lockscreen-options.h" +#include "lockscreen-options-debug.h" +#include "lockscreen-options-main.h" +#include "lockscreen-options-util.h" + +#include "starter-vconf.h" + +#define LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT 5 + +typedef struct { + int glStyle; + int stringId; + Evas_Object *check; + void (*func) (void *data, Evas_Object * obj, void *event_info); +} lockscreen_menu_item_info; + +static lockscreen_menu_item_info lockscreen_options_menu_item[] = { + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS, NULL, NULL}, + {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS_HELP, NULL, NULL}, + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_CLOCK, NULL, NULL}, + {ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON, IDS_LOCKSCREEN_OPTIONS_HELPTEXT, NULL, NULL}, + {ENUM_LOCKSCREEN_GENLIST_STYLE_HELP, IDS_LOCKSCREEN_OPTIONS_HELPTEXT_HELP, NULL, NULL} +}; + +static Elm_Gen_Item_Class itc_menu_1text1icon; +static Elm_Gen_Item_Class itc_menu_2text1icon; +static Elm_Gen_Item_Class itc_help_1text; + +static void _lockscreen_options_main_back_cb(void *data, Evas_Object * obj, + void *event_info) +{ + lockscreen_options_ug_data *ug_data = + (lockscreen_options_ug_data *) data; + + if (ug_data == NULL) + return; + + ug_destroy_me(ug_data->ug); +} + +static char *_lockscreen_options_main_gl_label_get(void *data, + Evas_Object * obj, + const char *part) +{ + if (data == NULL || part == NULL) + return NULL; + + lockscreen_menu_item_info *lockoption_data = + (lockscreen_menu_item_info *) data; + + if ((strcmp(part, "elm.text") == 0) || + (strcmp(part, "elm.text.1") == 0)) { + return + strdup(lockscreen_optoins_get_string + (lockoption_data->stringId)); + } + + return NULL; + +} + +static void _lockscreen_options_set_menu_status(int stringId, int value) +{ + int ret = 0; + switch (stringId) { + case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, value); + break; + case IDS_LOCKSCREEN_OPTIONS_CLOCK: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, value); + break; + case IDS_LOCKSCREEN_OPTIONS_HELPTEXT: + ret = vconf_set_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, value); + break; + default: + LOCKOPTIONS_DBG("NO VALID STRINGID %d", stringId); + break; + } +} + +static bool _lockscreen_options_get_menu_status(int stringId) +{ + int status = 0; + int ret = 0; + + switch (stringId) { + case IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_EVENT_NOTIFICATION_DISPLAY, &status); + break; + case IDS_LOCKSCREEN_OPTIONS_CLOCK: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_CLOCK_DISPLAY, &status); + break; + case IDS_LOCKSCREEN_OPTIONS_HELPTEXT: + ret = vconf_get_bool(VCONFKEY_LOCKSCREEN_HELP_TEXT_DISPLAY, &status); + break; + default: + LOCKOPTIONS_DBG("NO VALID INDEX %d", stringId); + break; + } + + if (ret == -1) { + LOCKOPTIONS_ERR("Failed to get vconfkey %d!", stringId); + return 0; + } + + LOCKOPTIONS_DBG + ("_lockscreen_options_get_menu_status index %d Status %d", stringId, + status); + + return status; +} + +static void _lockscreen_options_check_changed_cb(void *data, Evas_Object * obj, + void *event_info) +{ + if (data == NULL || obj == NULL) + return; + + lockscreen_menu_item_info *lockoption_data = + (lockscreen_menu_item_info *) data; + + Eina_Bool ret; + int value = 0; + + ret = elm_check_state_get(obj); + + LOCKOPTIONS_DBG("_lockscreen_options_check_changed_cb : %s", + ret == EINA_TRUE ? "ON" : "OFF"); + + if (ret == EINA_TRUE) { + value = 1; + } else { + value = 0; + } + + _lockscreen_options_set_menu_status(lockoption_data->stringId, value); +} + +static Evas_Object *_lockscreen_options_main_gl_icon_get(void *data, + Evas_Object * obj, + const char *part) +{ + if (data == NULL || obj == NULL) + return NULL; + + lockscreen_menu_item_info *lockoption_data = + (lockscreen_menu_item_info *) data; + + LOCKOPTIONS_DBG("icon get stringId : %d", lockoption_data->stringId); + + Evas_Object *check; + int value = 0; + + check = elm_check_add(obj); + elm_object_style_set(check, "on&off"); + evas_object_show(check); + + value = _lockscreen_options_get_menu_status(lockoption_data->stringId); + elm_check_state_set(check, value); + + evas_object_pass_events_set(check, 1); + evas_object_propagate_events_set(check, 0); + + evas_object_smart_callback_add(check, "changed", + _lockscreen_options_check_changed_cb, + lockoption_data); + + lockoption_data->check = check; + + return check; +} + +static void _lockscreen_options_main_gl_del(void *data, Evas_Object * obj) +{ + LOCKOPTIONS_DBG("_lockscreen_options_main_gl_del"); +} + +static void _lockscreen_options_main_gl_sel(void *data, Evas_Object * obj, + void *event_info) +{ + if (data == NULL) + return; + + lockscreen_menu_item_info *lockoption_data = NULL; + + elm_genlist_item_selected_set((Elm_Object_Item *) event_info, + EINA_FALSE); + + Elm_Object_Item *item = (Elm_Object_Item *) event_info; + lockoption_data = + (lockscreen_menu_item_info *) elm_object_item_data_get(item); + if (lockoption_data == NULL) { + return; + } + + if (lockoption_data->stringId == + IDS_LOCKSCREEN_OPTIONS_EVENT_NOTIFICATIONS + || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_CLOCK + || lockoption_data->stringId == IDS_LOCKSCREEN_OPTIONS_HELPTEXT) { + Eina_Bool check_state = + elm_check_state_get(lockoption_data->check); + _lockscreen_options_set_menu_status(lockoption_data->stringId, + !check_state); + elm_genlist_item_update(item); + } + + if (lockoption_data->func != NULL) { + lockoption_data->func(data, obj, event_info); + } +} + +static void _lockscreen_options_create_gl_item(Elm_Gen_Item_Class * item, + int glStyle) +{ + if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) { + item->item_style = LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON; + item->func.text_get = _lockscreen_options_main_gl_label_get; + item->func.content_get = _lockscreen_options_main_gl_icon_get; + item->func.state_get = NULL; + item->func.del = _lockscreen_options_main_gl_del; + } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) { + item->item_style = LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON; + item->func.text_get = _lockscreen_options_main_gl_label_get; + item->func.content_get = _lockscreen_options_main_gl_icon_get; + item->func.state_get = NULL; + item->func.del = NULL; + } else if (glStyle == ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) { + item->item_style = LOCKSCREEN_GENLIST_STYLE_HELP; + item->func.text_get = _lockscreen_options_main_gl_label_get; + item->func.content_get = NULL; + item->func.state_get = NULL; + item->func.del = _lockscreen_options_main_gl_del; + } else { + LOCKOPTIONS_DBG("_lockscreen_options_create_gl_item FAIL\n"); + } +} + +void lockscreen_options_main_create_view(lockscreen_options_ug_data * ug_data) +{ + LOCKOPTIONS_DBG("lockscreen_options_main_create_view begin\n"); + + Evas_Object *navi_bar = ug_data->navi_bar; + Evas_Object *back_button = NULL; + Evas_Object *genlist = NULL; + Elm_Object_Item *item = NULL; + int i = 0; + + if (navi_bar == NULL) { + LOCKOPTIONS_WARN("navi_bar is null."); + return; + } + + _lockscreen_options_create_gl_item(&(itc_menu_1text1icon), + ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON); + _lockscreen_options_create_gl_item(&(itc_menu_2text1icon), + ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON); + _lockscreen_options_create_gl_item(&(itc_help_1text), + ENUM_LOCKSCREEN_GENLIST_STYLE_HELP); + + genlist = elm_genlist_add(navi_bar); + + elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + elm_object_style_set(genlist, "dialogue"); + + lockscreen_options_util_create_seperator(genlist); + + for (i = 0; i < LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT; i++) { + Elm_Gen_Item_Class *itc = NULL; + if (lockscreen_options_menu_item[i].glStyle == + ENUM_LOCKSCREEN_GENLIST_STYLE_1TEXT1ICON) { + itc = &(itc_menu_1text1icon); + elm_genlist_item_append(genlist, + itc, + & + (lockscreen_options_menu_item + [i]), NULL, + ELM_GENLIST_ITEM_NONE, + _lockscreen_options_main_gl_sel, + ug_data); + } else if(lockscreen_options_menu_item[i].glStyle == + ENUM_LOCKSCREEN_GENLIST_STYLE_2TEXT1ICON) { + itc = &(itc_menu_2text1icon); + elm_genlist_item_append(genlist, + itc, + & + (lockscreen_options_menu_item + [i]), NULL, + ELM_GENLIST_ITEM_NONE, + _lockscreen_options_main_gl_sel, + ug_data); + } else if (lockscreen_options_menu_item[i].glStyle == + ENUM_LOCKSCREEN_GENLIST_STYLE_HELP) { + itc = &(itc_help_1text); + item = elm_genlist_item_append(genlist, + itc, + & + (lockscreen_options_menu_item + [i]), NULL, + ELM_GENLIST_ITEM_NONE, + NULL, NULL); + elm_genlist_item_select_mode_set(item, + ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + if(i != (LOCKSCREEN_OPTOINS_GENLIST_ITEM_CNT - 1)){ + lockscreen_options_util_create_underline(genlist); + } + } else { + LOCKOPTIONS_WARN("lockscreen option has no such type."); + return; + } + } + + back_button = elm_button_add(navi_bar); + elm_object_style_set(back_button, "naviframe/back_btn/default"); + evas_object_smart_callback_add(back_button, "clicked", + _lockscreen_options_main_back_cb, + ug_data); + + elm_naviframe_item_push(navi_bar, _("IDS_ST_BODY_LOCK_SCREEN") , back_button, NULL, genlist, NULL); +} diff --git a/mobile/lock-setting/lockscreen-options/src/lockscreen-options-util.c b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-util.c new file mode 100755 index 0000000..6f0b84c --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/src/lockscreen-options-util.c @@ -0,0 +1,148 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include "lockscreen-options-debug.h" +#include "lockscreen-options.h" +#include "lockscreen-options-util.h" + +const char *sys_str_table[] = { + "IDS_COM_SK_OK", + "IDS_COM_SK_CANCEL", +}; + +const char *app_str_table[] = { + "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS", + "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN", + "IDS_ST_BODY_CLOCK", + "IDS_IM_BODY_HELP_TEXT", + "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +}; + +static Elm_Gen_Item_Class itc_underline; +static Elm_Gen_Item_Class itc_separator; + +Evas_Object *lockscreen_options_util_create_navigation(Evas_Object * parent) +{ + Evas_Object *navi_bar = NULL; + + if (parent == NULL) { + LOCKOPTIONS_WARN("Parent is null."); + return NULL; + } + + navi_bar = elm_naviframe_add(parent); + if (navi_bar == NULL) { + LOCKOPTIONS_ERR("Cannot add naviagtionbar."); + return NULL; + } + + elm_object_part_content_set(parent, "elm.swallow.content", navi_bar); + + evas_object_show(navi_bar); + + return navi_bar; +} + +Evas_Object *lockscreen_options_util_create_layout(Evas_Object * parent, + const char *file, + const char *group) +{ + Evas_Object *layout = NULL; + + if (parent == NULL) { + LOCKOPTIONS_WARN("Parent is null."); + return NULL; + } + + layout = elm_layout_add(parent); + if (layout == NULL) { + LOCKOPTIONS_ERR("Cannot add layout."); + return NULL; + } + + if ((file != NULL) && (group != NULL)) { + elm_layout_file_set(layout, file, group); + } + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + evas_object_show(layout); + + return layout; +} + +void lockscreen_options_util_create_seperator(Evas_Object * genlist) +{ + if (NULL == genlist) + return; + + Elm_Object_Item *item = NULL; + + itc_separator.item_style = LOCKSCREEN_GENLIST_STYLE_SEPERATOR; + itc_separator.func.text_get = NULL; + itc_separator.func.content_get = NULL; + itc_separator.func.state_get = NULL; + itc_separator.func.del = NULL; + + item = + elm_genlist_item_append(genlist, &(itc_separator), NULL, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(item, + ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); +} + +void lockscreen_options_util_create_underline(Evas_Object * genlist) +{ + if (NULL == genlist) + return; + + Elm_Object_Item *item = NULL; + + itc_underline.item_style = LOCKSCREEN_GENLIST_STYLE_UNDERLINE; + itc_underline.func.text_get = NULL; + itc_underline.func.content_get = NULL; + itc_underline.func.state_get = NULL; + itc_underline.func.del = NULL; + + item = + elm_genlist_item_append(genlist, &(itc_underline), NULL, NULL, + ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(item, + ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); +} + +char *lockscreen_optoins_get_string(int id) +{ + LOCKOPTIONS_DBG("get string id : %d\n", id); + + char *str = NULL; + + if (id < IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX) { + str = dgettext("sys_string", sys_str_table[id]); + } else { + str = + dgettext(PKGNAME, + app_str_table[id - + IDS_LOCKSCREEN_OPTIONS_SYSTEM_STRING_MAX]); + } + + LOCKOPTIONS_DBG("get string : %s\n", str); + + return str; +} diff --git a/mobile/lock-setting/lockscreen-options/src/lockscreen-options.c b/mobile/lock-setting/lockscreen-options/src/lockscreen-options.c new file mode 100755 index 0000000..de5eb00 --- /dev/null +++ b/mobile/lock-setting/lockscreen-options/src/lockscreen-options.c @@ -0,0 +1,213 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#ifndef UG_MODULE_API +#define UG_MODULE_API __attribute__ ((visibility("default"))) +#endif + +#include <Elementary.h> +#include <ui-gadget-module.h> + +#include "lockscreen-options.h" +#include "lockscreen-options-util.h" +#include "lockscreen-options-main.h" + +static Evas_Object *create_bg(Evas_Object * parent) +{ + Evas_Object *bg = elm_bg_add(parent); + + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_object_style_set(bg, "group_list"); + + elm_object_part_content_set(parent, "elm.swallow.bg", bg); + evas_object_show(bg); + + return bg; +} + +static Evas_Object *create_fullview(Evas_Object * parent, + lockscreen_options_ug_data * ug_data) +{ + Evas_Object *base = NULL; + Evas_Object *navi_bar = NULL; + + base = lockscreen_options_util_create_layout(parent, NULL, NULL); + + elm_layout_theme_set(base, "layout", "application", "default"); + elm_win_resize_object_add(parent, base); + + elm_win_indicator_mode_set(parent, ELM_WIN_INDICATOR_SHOW); + + create_bg(base); + + navi_bar = lockscreen_options_util_create_navigation(base); + ug_data->navi_bar = navi_bar; + + lockscreen_options_main_create_view(ug_data); + + return base; +} + +static Evas_Object *create_frameview(Evas_Object * parent, + lockscreen_options_ug_data * ug_data) +{ + Evas_Object *base = NULL; + + return base; +} + +static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, + void *priv) +{ + Evas_Object *parent = NULL; + Evas_Object *win_main = NULL; + lockscreen_options_ug_data *ug_data = NULL; + + if (!ug || !priv) + return NULL; + + bindtextdomain(PKGNAME, "/usr/ug/res/locale"); + + ug_data = priv; + ug_data->ug = ug; + + parent = ug_get_parent_layout(ug); + if (!parent) + return NULL; + + win_main = ug_get_window(); + if (!win_main) { + return NULL; + } + + ug_data->win_main = win_main; + + if (mode == UG_MODE_FULLVIEW) + ug_data->base = create_fullview(parent, ug_data); + else + ug_data->base = create_frameview(parent, ug_data); + + return ug_data->base; +} + +static void on_start(ui_gadget_h ug, service_h service, void *priv) +{ +} + +static void on_pause(ui_gadget_h ug, service_h service, void *priv) +{ + +} + +static void on_resume(ui_gadget_h ug, service_h service, void *priv) +{ + +} + +static void on_destroy(ui_gadget_h ug, service_h service, void *priv) +{ + lockscreen_options_ug_data *ug_data; + + if (!ug || !priv) + return; + + ug_data = priv; + evas_object_del(ug_data->base); + ug_data->base = NULL; +} + +static void on_message(ui_gadget_h ug, service_h msg, service_h service, + void *priv) +{ +} + +static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, + void *priv) +{ + switch (event) { + case UG_EVENT_LOW_MEMORY: + break; + case UG_EVENT_LOW_BATTERY: + break; + case UG_EVENT_LANG_CHANGE: + break; + case UG_EVENT_ROTATE_PORTRAIT: + break; + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + break; + case UG_EVENT_ROTATE_LANDSCAPE: + break; + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + break; + default: + break; + } +} + +static void on_key_event(ui_gadget_h ug, enum ug_key_event event, + service_h service, void *priv) +{ + if (!ug) + return; + + switch (event) { + case UG_KEY_EVENT_END: + ug_destroy_me(ug); + break; + default: + break; + } +} + +UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) +{ + lockscreen_options_ug_data *ug_data; + + if (!ops) + return -1; + + ug_data = calloc(1, sizeof(lockscreen_options_ug_data)); + if (!ug_data) + return -1; + + ops->create = on_create; + ops->start = on_start; + ops->pause = on_pause; + ops->resume = on_resume; + ops->destroy = on_destroy; + ops->message = on_message; + ops->event = on_event; + ops->key_event = on_key_event; + ops->priv = ug_data; + ops->opt = UG_OPT_INDICATOR_ENABLE; + + return 0; +} + +UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) +{ + lockscreen_options_ug_data *ug_data; + + if (!ops) + return; + + ug_data = ops->priv; + if (ug_data) + free(ug_data); +} diff --git a/mobile/lock-setting/po/CMakeLists.txt b/mobile/lock-setting/po/CMakeLists.txt new file mode 100755 index 0000000..647202a --- /dev/null +++ b/mobile/lock-setting/po/CMakeLists.txt @@ -0,0 +1,26 @@ +# for i18n + +SET(LOCKPONAME "ug-lockscreen-options") + +SET(POFILES ar.po az.po bg.po ca.po cs.po da.po de_DE.po el_GR.po en.po en_PH.po en_US.po es_ES.po es_US.po fi.po fr_CA.po fr_FR.po ga.po gl.po hi.po hr.po hu.po hy.po is.po it_IT.po ja_JP.po ka.po kk.po ko_KR.po lt.po lv.po mk.po nb.po nl_NL.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po zh_CN.po zh_HK.po zh_SG.po zh_TW.po) + +SET(MSGFMT "/usr/bin/msgfmt") + +FOREACH(pofile ${POFILES}) + SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}) + MESSAGE("PO: ${pofile}") + GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE) + GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE) + SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo) + ADD_CUSTOM_COMMAND( + OUTPUT ${moFile} + COMMAND ${MSGFMT} -o ${moFile} ${absPofile} + DEPENDS ${absPofile} + ) + +INSTALL(FILES ${moFile} DESTINATION /usr/ug/res/locale/${lang}/LC_MESSAGES RENAME ${LOCKPONAME}.mo) + SET(moFiles ${moFiles} ${moFile}) +ENDFOREACH(pofile) + +MESSAGE(".mo files: ${moFiles}") +ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles}) diff --git a/mobile/lock-setting/po/ar.po b/mobile/lock-setting/po/ar.po new file mode 100644 index 0000000..7c0e6a6 --- /dev/null +++ b/mobile/lock-setting/po/ar.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "قفل الشاشة" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "عرض إخطارات الحدث على شاشة القفل" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "إشعارات الحدث" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "الساعة" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "الطقس" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "تعيين اختصارات على شاشة القفل" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "الاختصارات" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "ساعة ثنائية" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "عرض نص التعليمات على شاشة القفل" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "عرض ساعة مزدوجة على شاشة القفل أثناء التجوال" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "انقر مع الاستمرار فوق الشاشة مع تدوير الجهاز لفتح الكاميرا" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "وصول سريع إلى الكاميرا" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "تعيين اختصارات" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "قم بالسحب والإسقاط لتغيير الترتيب" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "اختر تطبيق" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "انقر فوق الاختصار لتخصيص تطبيق" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "تعديل الاختصارات" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "نص المساعدة" + diff --git a/mobile/lock-setting/po/az.po b/mobile/lock-setting/po/az.po new file mode 100644 index 0000000..305092a --- /dev/null +++ b/mobile/lock-setting/po/az.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Ekranı kilidləyin" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Kilid ekranında tədbir bildirişlərinə bax" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Tədbir bildirişləri" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Saat" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Hava" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Kilid ekranına qısayol qur" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Çevik düymələr" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "İkili saat" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Kilid ekranında kömək mətnini göstər" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Rouminq zamanı kilid ekranında ikili saat göstər" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Kameranı açmaq üçün ekrana vurun saxlayaraq cihazı fırladın" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Kamera çevik girişi" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Qısayolları qur" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Sıranı dəyişmək üçün dartıb buraxın" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Proqramı seç" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Proqrama təyin etmək üçün qısayola vur" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Qısayolları redaktə edin" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Yardımçı mətn" + diff --git a/mobile/lock-setting/po/bg.po b/mobile/lock-setting/po/bg.po new file mode 100644 index 0000000..1033cf8 --- /dev/null +++ b/mobile/lock-setting/po/bg.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Заключен екран" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Преглед на известията за събития на заключения екран" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Уведомявания за събития" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Часовник" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Време" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Задайте бързите клавиши на заключения екран" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Бърз достъп" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Двоен часовник" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Показвай текста на помощта на заключения екран" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Покажи двоен часовник на заключения екран в роуминг" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Чукнете и задръжте екрана, докато въртите устройството, за да отворите Камера" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Бърз достъп с камера" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Задаване на бързи команди" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Плъзнете и пуснете, за да промените реда" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Избор на приложение" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Чукнете върху бърза команда, за да зададете приложение" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Редактиране на бързи клавиши" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Помощен текст" + diff --git a/mobile/lock-setting/po/ca.po b/mobile/lock-setting/po/ca.po new file mode 100644 index 0000000..e6a6351 --- /dev/null +++ b/mobile/lock-setting/po/ca.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Bloquejar pantalla" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Veure notificacions d'esdeveniments a pantalla de bloqueig" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Avisos d'esdeveniments" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Rellotge" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Temps" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Definir accessos directes a la pantalla de bloqueig" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Accessos directes" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Rellotge dual" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Mostrar text d'ajuda a la pantalla de bloqueig" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Mostrar rellotge dual a la pantalla de bloqueig en itinerància" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Mantingui tocada la pantalla mentre gira el dispositiu per obrir la Càmera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Accés ràpid a càmera" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Definir editar accessos directes" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arrossegui i deixi anar per canviar l'ordre" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Seleccionar aplicació" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Toqui l'accés directe per assignar l'aplicació" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editar accessos directes" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Text ajuda" + diff --git a/mobile/lock-setting/po/cs.po b/mobile/lock-setting/po/cs.po new file mode 100644 index 0000000..5a6e267 --- /dev/null +++ b/mobile/lock-setting/po/cs.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Zamknout displej" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Zobrazení upozorňování na události na zamknutém displeji" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Upozorňování na události" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Hodiny" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Počasí" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Nastavit zástupce na zamknutém displeji" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Zkratky" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Duál. hodiny" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Zobrazit text nápovědy na zamknutém displeji" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Zobrazit duální hodiny na zamknutém displeji během roamingu" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Klepnutím na displej a podržením při otáčení zařízení otevřete Fotoaparát" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Rychlý přístup k fotoap." + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Nastavit zástupce" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Přetažením změníte pořadí" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Vyberte aplikaci" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Chcete-li přiřadit aplikaci, klepněte na zástupce" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Upravit zástupce" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Nápověda" + diff --git a/mobile/lock-setting/po/da.po b/mobile/lock-setting/po/da.po new file mode 100644 index 0000000..d9a26bb --- /dev/null +++ b/mobile/lock-setting/po/da.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Låseskærm" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Vis begivenhedsbeskeder på den låste skærm" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Begivenhedsbeskeder" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Ur" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Vejr" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Indstil genveje på låseskærm" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Genveje" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dobbelt-ur" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Vis hjælpetekst på låst skærm" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Vis dobbelt ur på låseskærm under roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tryk og hold på skærmen, mens du roterer enheden, for at åbne Kamera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Hurtig adgang til kamera" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Angiv genveje" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Træk og slip for at skifte rækkefølge" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Vælg program" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tryk på genvej for at tildele program" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Redigér genveje" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Hjælpetekst" + diff --git a/mobile/lock-setting/po/de_DE.po b/mobile/lock-setting/po/de_DE.po new file mode 100644 index 0000000..70a4592 --- /dev/null +++ b/mobile/lock-setting/po/de_DE.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Sperrbildschirm" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Ereignisbenachrichtigungen auf Sperrbildschirm anzeigen" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Ereignisbenachrichtig." + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Uhr" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Wetter" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Schnellzugriffe auf gesperrtem Bildschirm festlegen" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Schnellzugriffe" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dual-Uhr" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Hilfetext auf gesperrtem Bildschirm anzeigen" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Dual-Uhr beim Roaming auf gesperrtem Bildschirm anzeigen" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tippen Sie auf den Bildschirm und halten Sie ihn, während Sie das Gerät drehen, um die Kamera zu öffnen." + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Kamera-Schnellzugriff" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Schnellzugriffe festlegen" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Ziehen und ablegen, um die Reihenfolge zu ändern." + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Anwendung auswählen" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Auf Shortcut tippen, um Anwendung zuzuweisen." + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Schnellzugriffe bearbeiten" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Hilfetext" + diff --git a/mobile/lock-setting/po/el_GR.po b/mobile/lock-setting/po/el_GR.po new file mode 100644 index 0000000..151b419 --- /dev/null +++ b/mobile/lock-setting/po/el_GR.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Οθόνη κλειδώματος" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Προβολή ειδοποιήσεων συμβάντων στην οθόνη κλειδώματος" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Ειδοποιήσεις συμβάντων" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Ρολόι" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Καιρός" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Ρύθμιση συντομεύσεων στην οθόνη κλειδώματος" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Συντομεύσεις" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Διπλό ρολόι" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Εμφάνιση κειμένου βοήθειας στην οθόνη κλειδώματος" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Εμφάνιση διπλού ρολογιού στην οθόνη κλειδώματος κατά την περιαγωγή" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Πατήστε παρατεταμένα στην οθόνη και κατά την περιστροφή της συσκευής για να ανοίξετε την Κάμερα" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Γρήγορη πρόσβαση κάμερας" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Ρύθμιση συντομεύσεων" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Μεταφέρετε και αποθέστε για να αλλάξετε τη σειρά" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Επιλογή εφαρμογής" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Πατήστε τη συντόμευση για αντιστοίχιση εφαρμογής" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Επεξεργασία συντομεύσεων" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Κείμενο βοήθειας" + diff --git a/mobile/lock-setting/po/en.po b/mobile/lock-setting/po/en.po new file mode 100644 index 0000000..5c14712 --- /dev/null +++ b/mobile/lock-setting/po/en.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Lock screen" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "View event notifications on the lock screen" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Event notifications" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Clock" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Weather" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Set shortcuts on lock screen" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Shortcuts" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dual clock" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Show help text on lock screen" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Show dual clock on lock screen when roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tap and hold the screen while rotating the device to open Camera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Camera quick access" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Set shortcuts" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Drag and drop to change order" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Select application" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tap shortcut to assign application" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Edit shortcuts" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Help text" + diff --git a/mobile/lock-setting/po/en_PH.po b/mobile/lock-setting/po/en_PH.po new file mode 100644 index 0000000..5c14712 --- /dev/null +++ b/mobile/lock-setting/po/en_PH.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Lock screen" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "View event notifications on the lock screen" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Event notifications" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Clock" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Weather" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Set shortcuts on lock screen" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Shortcuts" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dual clock" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Show help text on lock screen" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Show dual clock on lock screen when roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tap and hold the screen while rotating the device to open Camera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Camera quick access" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Set shortcuts" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Drag and drop to change order" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Select application" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tap shortcut to assign application" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Edit shortcuts" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Help text" + diff --git a/mobile/lock-setting/po/en_US.po b/mobile/lock-setting/po/en_US.po new file mode 100644 index 0000000..a1db6bc --- /dev/null +++ b/mobile/lock-setting/po/en_US.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Lock screen" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "View event notifications on the lock screen" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Event notifications" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Clock" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Weather" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Set shortcuts on lock screen." + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Shortcuts" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dual clock" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Show help text on lock screen." + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Show dual clock on lock screen when roaming." + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tap and hold the screen while rotating the device to open Camera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Camera quick access" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Set shortcuts" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Drag and drop to change order" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Select application" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tap shortcut to assign application" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Edit shortcuts" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Help text" + diff --git a/mobile/lock-setting/po/es_ES.po b/mobile/lock-setting/po/es_ES.po new file mode 100644 index 0000000..407f8d7 --- /dev/null +++ b/mobile/lock-setting/po/es_ES.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Pantalla de bloqueo" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Ver notificaciones de eventos en la pantalla de bloqueo" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notificaciones de evento" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Reloj" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Clima" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Definir accesos directos en pantalla de bloqueo" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Accesos directos" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Reloj dual" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Mostrar texto de ayuda en pantalla de bloqueo" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Mostrar reloj dual en pantalla de bloqueo en itinerancia" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Acceso rápido a Cámara" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Definir accesos directos" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arrastrar y soltar para cambiar el orden" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Seleccionar aplicación" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Toque el acceso directo para asignar la aplicación" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editar accesos directos" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texto de ayuda" + diff --git a/mobile/lock-setting/po/es_MX.po b/mobile/lock-setting/po/es_MX.po new file mode 100644 index 0000000..a3ce4bd --- /dev/null +++ b/mobile/lock-setting/po/es_MX.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Bloqueo de pantalla" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Ver las notificaciones de eventos en la pantalla de bloqueo" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notificaciones de eventos" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Reloj" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Clima" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Definir atajos en pantalla bloqueada" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Atajos" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Reloj dual" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Mostrar texto de ayuda en pantalla bloqueada" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Mostrar el reloj dual en la pantalla bloqueada durante el roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Acceso rápido a cámara" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Configurar atajos" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arrastre y coloque para cambiar el orden" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Seleccionar aplicación" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Pulse el atajo para asignar la aplicación" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editar atajos" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texto de ayuda" + diff --git a/mobile/lock-setting/po/es_US.po b/mobile/lock-setting/po/es_US.po new file mode 100644 index 0000000..43a19d9 --- /dev/null +++ b/mobile/lock-setting/po/es_US.po @@ -0,0 +1,51 @@ +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Ver las notificaciones de eventos en la pantalla de bloqueo" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notificaciones de eventos" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Reloj" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Clima" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Definir atajos en pantalla bloqueada" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Atajos" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Reloj dual" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Mostrar texto de ayuda en pantalla bloqueada" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Mostrar el reloj dual en la pantalla bloqueada durante el roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Mantenga pulsada la pantalla mientras gira el dispositivo para abrir la Cámara" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Acceso rápido a cámara" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Configurar atajos" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arrastre y coloque para cambiar el orden" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Seleccionar aplicación" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Pulse el atajo para asignar la aplicación" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editar atajos" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texto de ayuda" + diff --git a/mobile/lock-setting/po/et.po b/mobile/lock-setting/po/et.po new file mode 100644 index 0000000..073973f --- /dev/null +++ b/mobile/lock-setting/po/et.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Lukusta ekraan" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Vaadake sündmuste teavitusi lukustatud ekraanil" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Sündmuse teavitused" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Kell" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Ilm" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Määra otseteed lukustusekraanil" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Otseteed" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Kaksikkell" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Näita spikrit lukustusekraanil" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Kuva rändluse ajal lukustusekraanil kaksikkell" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Kaamera avamiseks toksake ja hoidke sõrme ekraanil ning samal ajal pöörake seadet" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Kiirjuurdepääs kaamerale" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Määra otseteed" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Lohistage, et muuta järjestust" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Vali rakendus" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Toksake otseteed, et määrata rakendust" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Muuda otseteid" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Spikker" + diff --git a/mobile/lock-setting/po/eu.po b/mobile/lock-setting/po/eu.po new file mode 100644 index 0000000..8ba1000 --- /dev/null +++ b/mobile/lock-setting/po/eu.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Blokeatu pantaila" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Ikusi gertaeren jakinarazpenak blokeo pantailan" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Gertaeren jakinarazpenak" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Ordularia" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Eguraldia" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Ezarri lasterbideak blokeo pantailan" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Sarrera zuzenak" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Erloju duala" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Erakutsi laguntza testua blokeo pantailan" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Erakutsi erloju duala blokeo pantailan ibiltaritzan" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Ukitu eta eutsi pantaila gailua biratu bitartean Kamera irekitzeko" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Kameraren sarbide azkarra" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Ezarri lasterbideak" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arrastatu eta jaregin ordena aldatzeko" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Hautatu aplikazioa" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Ukitu lasterbidea aplikazioa esleitzeko" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editatu lasterbideak" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Laguntza testua" + diff --git a/mobile/lock-setting/po/fi.po b/mobile/lock-setting/po/fi.po new file mode 100644 index 0000000..856e0a0 --- /dev/null +++ b/mobile/lock-setting/po/fi.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Lukitusnäyttö" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Näytä tapahtumailmoitukset lukitusnäytössä" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Tapahtumailmoitukset" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Kello" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Sää" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Määritä pikanäppäimet lukitusnäytössä" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Pikanäppäimet" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Kaksoiskello" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Ohjetekstin näyttäminen lukitusnäytössä" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Näytä kaksoiskello lukitusnäytössä verkkovierailun aikana" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Avaa kamera painamalla näyttöä jonkin aikaa ja kiertämällä samalla laitetta" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Kameran pikakäyttö" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Määritä pikavalinnat" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Muuta järjestystä vetämällä ja pudottamalla" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Valitse sovellus" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Määritä sovellus napauttamalla pikakuvaketta" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Muokkaa pikavalintoja" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Ohjeteksti" + diff --git a/mobile/lock-setting/po/fr_CA.po b/mobile/lock-setting/po/fr_CA.po new file mode 100644 index 0000000..6982f65 --- /dev/null +++ b/mobile/lock-setting/po/fr_CA.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Écran verrouillé" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Voir les notifications d'évènements sur l'écran de verrouillage" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notifications évènements" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Horloge" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Météo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Sélectionner les raccourcis sur l'écran de verrouillage" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Raccourcis" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Deux horloges" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Afficher texte d'aide sur l'écran de verrouillage" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Afficher double horloge sur l'écran de verrouillage en itinérance" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Touchez longuement l'écran et faites pivoter l'appareil pour lancer l'appareil photo" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Accès rapide app. photo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Définir des raccourcis" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Glisser et déposer pour modifier l'ordre" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Sélectionnez une application" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Touchez le raccourci pour l'affecter à l'application" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Modifier les raccourcis" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texte d'aide" + diff --git a/mobile/lock-setting/po/fr_FR.po b/mobile/lock-setting/po/fr_FR.po new file mode 100644 index 0000000..0ffb78b --- /dev/null +++ b/mobile/lock-setting/po/fr_FR.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Écran de verrouillage" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Voir les notifications d'événements sur l'écran de verrouillage" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notifications événements" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Horloge" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Météo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Définir les raccourcis à afficher sur l'écran de verrouillage" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Raccourcis" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Double horloge" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Afficher le texte d'aide au déverrouillage sur l'écran" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Afficher la double horloge sur l'écran de verrouillage en itinérance" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Maintenez votre doigt appuyé sur l'écran et faites pivoter l'appareil pour ouvrir l'appareil photo" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Accès rapide app. photo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Définir des raccourcis" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Glisser et déposer pour modifier l'ordre" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Sélectionnez une application" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Appuyez sur le raccourci pour l'affecter à l'application" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Modifier les raccourcis" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texte d'aide" + diff --git a/mobile/lock-setting/po/ga.po b/mobile/lock-setting/po/ga.po new file mode 100644 index 0000000..54b0785 --- /dev/null +++ b/mobile/lock-setting/po/ga.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Glasáil an scáileán" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Amharc ar fhógraí imeachta ar an scáileán glasála" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Fógra faoi imeachtaí" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Clog" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Aimsir" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Socraigh aicearraí ar an scáileán glasála" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Aicearraí" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Déchlog" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Taispeáin téacs cabhrach ar an scáileán glasála" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Taispeáin déchlog ar an scáileáin glasála le linn fánaíocht" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tapáil agus coinnigh an scáileán agus an gléas á rothlú le Ceamara a oscailt" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Mear-rochtain ar cheamara" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Socraigh aicearraí" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Tarraing agus scaoil leis an ord a athrú" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Roghnaigh feidhmchlár" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tapáil aicearra le feidhmchlár a shannadh" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Cuir aicearraí in eagar" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Téacs cabhrach" + diff --git a/mobile/lock-setting/po/gl.po b/mobile/lock-setting/po/gl.po new file mode 100644 index 0000000..d1f01aa --- /dev/null +++ b/mobile/lock-setting/po/gl.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Bloquear pantalla" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Ver notificacións de eventos na pantalla de bloqueo" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notificacións de eventos" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Reloxo" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Tempo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Definir os atallos na pantalla de bloqueo" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Atallos" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Reloxo dual" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Amosa texto de axuda na pantalla de bloqueo" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Amosa o reloxo dual na pantalla de bloqueo durante a itinerancia" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Mantén tocada a pantalla mentres xiras o dispositivo para abrir a cámara" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Acceso rápido á cámara" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Definir atallos" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arrastra e solta para cambiar a orde" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Seleccionar aplicación" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Toca o atallo ao que desexas asignar a aplicación" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editar atallos" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texto de axuda" + diff --git a/mobile/lock-setting/po/hi.po b/mobile/lock-setting/po/hi.po new file mode 100644 index 0000000..1dc2c7e --- /dev/null +++ b/mobile/lock-setting/po/hi.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "स्क्रीन लॉक करें" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "लॉक स्क्रीन पर प्रसंग अधिसूचनाएँ देखें" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "प्रसंग अधिसूचनाएँ" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "घड़ी" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "मौसम" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "लॉक स्क्रीन पर शॉर्टकट्स सेट करें" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "शार्टकट्स" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "दोहरी घड़ी" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "लॉक स्क्रीन पर मदद टेक्स्ट दिखाता है" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "जब रोमिंग में हों तब लॉक स्क्रीन पर डुअल क्लॉक दिखाएँ" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "कैमरा खोलनें के लिए डिवाइस को घुमाते समय स्क्रीन को टैप और होल्ड करें" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "कैमरा क्विक ऍक्सेस" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "शॉर्टकट्स सेट करें" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "क्रम बदलने के लिए ड्रैग और ड्रॉप करें" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "एप्लीकेशन चुनें" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "एप्लीकेशन असाइन करने के लिए शॉर्टकट टैप करें" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "शॉर्टकट्स संपादित करें" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "सहायता टेक्स्ट" + diff --git a/mobile/lock-setting/po/hr.po b/mobile/lock-setting/po/hr.po new file mode 100644 index 0000000..86c6896 --- /dev/null +++ b/mobile/lock-setting/po/hr.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Zaslon zaključavanja" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Vidi obavijesti o događaju na zaslonu zaključavanja" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Obavijesti o događaju" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Sat" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Prognoza" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Postavi prečace na zaslonu zaključavanja" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Prečaci" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dvostruki sat" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Prikaži tekst pomoći na zaslonu zaključavanja" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Prikaži dvostruki sat na zaslonu zaključavanja u roamingu" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Dodirnite i držite zaslon dok okrećete uređaj da biste uključili fotoaparat" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Brzi pristup fotoaparatu" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Postavi prečace" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Dovucite i ispustite za promjenu redoslijeda" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Odaberi aplikaciju" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Dodaj prečac za dodjeljivanje aplikacije" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Uredi prečace" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Upute" + diff --git a/mobile/lock-setting/po/hu.po b/mobile/lock-setting/po/hu.po new file mode 100644 index 0000000..7028c02 --- /dev/null +++ b/mobile/lock-setting/po/hu.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Képernyő lezárása" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Eseményértesítések megjelenítése a zárolt képernyőn" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Eseményértesítések" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Óra" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Időjárás" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Zárolt képernyő parancsikonjainak beállítása" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Gyorsgombok" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Kettős óra" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Súgó megjelenítése a zárolt képernyőn" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Második óra megjelenítése a zárolt képernyőn roaming esetén" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "A Fényképező megnyitásához érintse meg a képernyőt, és forgassa el az eszközt" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Gyors fényképezés" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Parancsikonok beállítása" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Az elemek áthúzásával megváltoztathatja a sorrendet" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Alkalmazás kiválasztása" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Alkalmazás hozzárendeléséhez érintse meg a parancsikont" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Ikonok szerkesztése" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Súgószöveg" + diff --git a/mobile/lock-setting/po/hy.po b/mobile/lock-setting/po/hy.po new file mode 100644 index 0000000..6916644 --- /dev/null +++ b/mobile/lock-setting/po/hy.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Կողպել էկրանը" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Դիտել իրադարձության ծանուցումները կողպված էկրանին" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Իրադարձութ. ծանուցումներ" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Ժամացույց" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Եղանակ" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Դնել դյուրանցումներ կողպված էկրանին" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Արագ անցումներ" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Երկակի ժամացույց" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Ցույց տալ օգնության տեքստը կողպված էկրանի վրա" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Ռոումինգի ժամանակ ցույց տալ կրկնակի ժամացույցը կողպված էկրանին" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Թակեք և պահեք էկրանը սարքը պտտելու ընթացքում՝ Խցիկը բացելու համար" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Խցիկի արագ մուտք" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Դնել դյուրանցումներ" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Քարշել և թողնել՝ կարգը փոխելու համար" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Ընտրել ծրագիր" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Թակել դյուրանցումը՝ ծրագիր վերագրելու համար" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Խմբագրել դյուրանցումները" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Օգնության տեքստ" + diff --git a/mobile/lock-setting/po/is.po b/mobile/lock-setting/po/is.po new file mode 100644 index 0000000..5693eed --- /dev/null +++ b/mobile/lock-setting/po/is.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Læsa skjá" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Skoða viðburðatilkynningar á lásskjá" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Viðburðatilkynningar" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Klukka" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Veður" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Stilla flýtileiðir á læstum skjá" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Flýtileiðir" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Tvöföld klukka" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Sýna hjálpartexta á lásskjá" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Sýna tvöfalda klukku á lásskjá í reiki" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Pikkaðu á og haltu fingrinum á skjánum á meðan þú snýrð tækinu til að opna Myndavélina" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Flýtiaðgangur myndavélar" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Stilla flýtileiðir" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Dragðu og slepptu til að breyta röð" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Velja forrit" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Pikkaðu á flýtileið til að úthluta forriti" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Breyta flýtileiðum" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Hjálpartexti" + diff --git a/mobile/lock-setting/po/it_IT.po b/mobile/lock-setting/po/it_IT.po new file mode 100644 index 0000000..d39fd3c --- /dev/null +++ b/mobile/lock-setting/po/it_IT.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Schermata di blocco" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Visualizza le notifiche eventi sulla schermata di blocco" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notifiche eventi" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Orologio" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Meteo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Imposta collegamenti nella schermata di blocco" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Collegamenti" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Doppio orologio" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Mostra testo guida nella schermata di blocco" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Mostra orologio doppio nella schermata di blocco durante il roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tenere premuto lo schermo mentre si ruota il dispositivo per aprire la fotocamera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Sblocco fotocamera" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Imposta collegamenti" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Trascina per modificare ordine" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Seleziona applicazione" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tocca collegamento per assegnare un'applicazione" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Modifica collegamenti" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Testo guida" + diff --git a/mobile/lock-setting/po/ja_JP.po b/mobile/lock-setting/po/ja_JP.po new file mode 100644 index 0000000..19c083d --- /dev/null +++ b/mobile/lock-setting/po/ja_JP.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "ロック画面" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "ロック画面にイベント通知を表示" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "イベント通知" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "時計" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "天気予報" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "ロック画面に表示するショートカットを設定" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "ショートカット" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "デュアル時計" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "ロック画面にヘルプテキストを表示" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "ローミング時、ロック画面にデュアル時計を表示" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "画面を押しながら端末を回転させてカメラを起動" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "カメラクイック起動" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "ショートカットを設定" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "ドラッグして順番を並べ替えます。" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "アプリケーションを選択" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "ショートカットをタップしてアプリケーションを割り当てます。" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "ショートカットを編集" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "ヘルプ" + diff --git a/mobile/lock-setting/po/ka.po b/mobile/lock-setting/po/ka.po new file mode 100644 index 0000000..b6b045e --- /dev/null +++ b/mobile/lock-setting/po/ka.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "ეკრანის დაბლოკვა" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "მოვლენის შეტყობინებების ნახვა დაბლოკილ ეკრანზე" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "მოვლენის შეტყობინებები" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "საათი" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "ამინდი" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "სწრაფი ღილაკების დაყენება დაბლოკილ ეკრანზე" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "სწრაფი ღილაკები" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "ორმაგი საათი" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "დახმარების ტექსტის ჩვენება დაბლოკილ ეკრანზე" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "ორმაგი საათის ჩვენება დაბლოკილ ეკრანზე როუმინგის დროს" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "კამერის გასახსნელად, ხანგრძლივად შეეხეთ ეკრანს და მოაბრუნეთ აპარატი" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "კამერის სწრაფი გახსნა" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "ღილაკების დაყენება" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "აიღეთ და გადაიტანეთ, თუ გსურთ შეცვალოთ მიმდევრობა" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "აირჩიეთ პროგრამა" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "დააკაკუნეთ სწრაფ ღილაკზე, რომ მიანიჭოთ პროგრამის გახსნის ფუნქცია" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "სწრაფი ღილაკების შესწორება" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "დამხმარე ტექსტი" + diff --git a/mobile/lock-setting/po/kk.po b/mobile/lock-setting/po/kk.po new file mode 100644 index 0000000..5f30631 --- /dev/null +++ b/mobile/lock-setting/po/kk.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Экранды құлыптау" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Құлыптау экранында оқиғалар туралы хабарландыруларды қарап шығу" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Оқиғалар туралы хабарлау" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Сағат" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Ауа райы" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Құлып экранында белгішелерді белгілеу" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Тез кіру" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Қос сағат" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Құлыптаулы экранында көмек мәтінді көрсетіңіз" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Роумингте қос сағатты құлып экранынан көрсетіңіз" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Камераны ашу үшін құрылғыны бұрғанда экранды басып тұрыңыз" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Камераға жылдам өту" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Белгішелер орнату" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Ретін өзгерту үшін сүйреп алып барыңыз" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Бағдарлама таңдау" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Бағдарламаны тағайындау үшін белгішені түртіңіз" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Тез кіру ретін өзгерту" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Анықтама мәтіні" + diff --git a/mobile/lock-setting/po/ko_KR.po b/mobile/lock-setting/po/ko_KR.po new file mode 100644 index 0000000..aca7f74 --- /dev/null +++ b/mobile/lock-setting/po/ko_KR.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "잠금화면" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "잠금화면에서 일정 알림 보기" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "일정 알림" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "시계" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "날씨" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "잠금화면에 바로가기를 설정합니다" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "바로가기" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "듀얼 시계" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "잠금화면에 도움말을 표시합니다" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "로밍 시 잠금화면에 듀얼 시계를 표시합니다" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "화면을 길게 누른 채 디바이스를 회전하면 카메라가 실행됩니다" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "빠른 카메라 실행" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "바로가기 설정" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "순서를 바꾸려면 드래그하세요" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "애플리케이션 선택" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "애플리케이션을 지정하려면 바로가기를 누르세요" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "바로가기 편집" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "도움말" + diff --git a/mobile/lock-setting/po/lt.po b/mobile/lock-setting/po/lt.po new file mode 100644 index 0000000..7067c08 --- /dev/null +++ b/mobile/lock-setting/po/lt.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Užrakinimo ekranas" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Peržiūrėti pranešimus apie įvykius užrakintame ekrane" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Pranešimai apie įvykius" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Laikrodis" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Oras" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Nustatyti sparčiuosius mygtukus užrakinimo ekrane" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Sparčiosios prieigos mygtukai" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dvigubas laikrodis" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Rodyti pagalbos tekstą užrakintame ekrane" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Rodyti dvigubą laikrodį užrakinimo ekrane, kai naudojamasi tarptinkliniu ryšiu" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Jei norite atidaryti fotoaparatą, bakstelėkite ir laikykite ekraną sukdami įrenginį" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Gr. prieiga prie fotoap." + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Nustatyti trumpinius" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Vilkdami pakeiskite išdėstymą" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Pasirinkti programą" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Bakstelėkite spartųjį mygtuką, kad priskirtumėte programą" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Redaguoti nuorodas" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Pagalbos tekstas" + diff --git a/mobile/lock-setting/po/lv.po b/mobile/lock-setting/po/lv.po new file mode 100644 index 0000000..af7d248 --- /dev/null +++ b/mobile/lock-setting/po/lv.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Bloķēšanas ekrāns" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Skatīt notikumu paziņojumus bloķētā ekrānā" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notikumu paziņojumi" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Pulkstenis" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Laiks" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Iestatīt īsceļus bloķētajā ekrānā" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Īsceļi" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Duālais pulkstenis" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Rādīt palīdzības tekstu bloķēšanas ekrānā" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Viesabonēšanas laikā bloķēšanas ekrānā rādīt duālo pulksteni" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Lai atvērtu kameru, pieskarieties un turiet ekrānu, un vienlaicīgi pagrieziet ierīci" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Ātra piekļuve kamerai" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Iestatīt īsceļus" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Velciet un nometiet, lai mainītu kārtību" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Izvēlēties programmu" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Pieskarieties īsceļam, lai piešķirtu programmu" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Rediģēt īsceļus" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Palīdzības teksts" + diff --git a/mobile/lock-setting/po/mk.po b/mobile/lock-setting/po/mk.po new file mode 100644 index 0000000..2cc2c03 --- /dev/null +++ b/mobile/lock-setting/po/mk.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Заклучување на екранот" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Гледај известувања за настани на екранот за заклучување" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Известувања за настани" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Часовник" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Време" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Постави кратенки на екранот за заклучување" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Кратенки" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Двоен часовник" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Прикажи текст за помош на екранот за заклучување" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Прикажи двоен часовник на екранот за заклучување при роаминг" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Допрете и држете го екранот додека го вртите уредот за да го отворите фотоапаратот" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Брз пристап до камерата" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Одреди кратенки" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Повлечете и пуштете за да го смените редоследот" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Избери апликација" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Допрете кратенка за да доделите апликација" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Измени кратенки" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Текст за помош" + diff --git a/mobile/lock-setting/po/nb.po b/mobile/lock-setting/po/nb.po new file mode 100644 index 0000000..167c148 --- /dev/null +++ b/mobile/lock-setting/po/nb.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Skjermlås" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Vis hendelsesvarsler på skjermlåsen" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Hendelsesvarsler" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Klokke" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Vær" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Angi snarveier på skjermlås" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Snarveier" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dobbel klokke" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Vis hjelpetekst på skjermlås" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Vis dobbel klokke på skjermlås under roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Trykk på og hold skjermen mens du roterer enheten for å åpne Kamera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Hurtigtilgang til kamera" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Angi snarveier" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Dra og slipp for å endre rekkefølgen" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Velg program" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Trykk på snarvei for å tilordne program" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Rediger snarveier" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Hjelpetekst" + diff --git a/mobile/lock-setting/po/nl_NL.po b/mobile/lock-setting/po/nl_NL.po new file mode 100644 index 0000000..9289e1b --- /dev/null +++ b/mobile/lock-setting/po/nl_NL.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Vergrendelscherm" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Meldingen van agenda-items weergeven op het vergrendelscherm" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Meldingen agenda-items" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Klok" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Weer" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Sneltoetsen instellen op vergrendeld scherm" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Sneltoetsen" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Twee klokken" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Help-tekst op vergrendeld scherm weergeven" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Dubbele klok weergeven op vergrendeld scherm bij roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tik en houd uw vinger op het scherm terwijl u het apparaat draait om de camera te openen" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Camera ontgrendelen" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Snelkoppelingen instellen" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Sleep en zet neer om volgorde te wijzigen" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Applicatie selecteren" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tik op sneltoets om applicatie toe te wijzen" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Sneltoetsen wijzigen" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Help-tekst" + diff --git a/mobile/lock-setting/po/pl.po b/mobile/lock-setting/po/pl.po new file mode 100644 index 0000000..3d8cbae --- /dev/null +++ b/mobile/lock-setting/po/pl.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Ekran blokady" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Wyświetlaj powiadomienia o wydarzeniach na ekranie blokady" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Powiadomienia o wydarzen." + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Zegar" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Pogoda" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Ustaw skróty na ekranie blokady" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Skróty klawiszowe" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Zegar podwójny" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Pokaż tekst pomocy na ekranie blokady" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Wyświetlanie zegara podwójnego na ekranie blokady podczas roamingu" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Obracając urządzenie, dotknij i przytrzymaj ekran, aby otworzyć aparat" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Skrót aparatu" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Ustawianie skrótów" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Przeciągnij i upuść, aby zmienić kolejność" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Wybierz aplikację" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Dotknij skrótu, aby przypisać aplikację" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Edytuj skróty" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Tekst pomocy" + diff --git a/mobile/lock-setting/po/pt_BR.po b/mobile/lock-setting/po/pt_BR.po new file mode 100644 index 0000000..8072ea6 --- /dev/null +++ b/mobile/lock-setting/po/pt_BR.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Tela de bloqueio" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Exibir notificações de eventos na tela de bloqueio" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notificações de evento" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Relógio" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Clima" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Definir atalhos na tela de bloqueio" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Atalhos" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Relógio duplo" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Exibir texto de ajuda na tela bloqueada" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Mostrar relógio duplo na tela de bloqueio quando em roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Toque e segure a tela enquanto gira o dispositivo para abrir a Câmera" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Acesso rápido à Câmera" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Configurar atalhos" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arraste e solte para alterar a ordem" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Selecionar aplicação" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Toque no atalho para atribuir aplicativo" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editar atalhos" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texto de ajuda" + diff --git a/mobile/lock-setting/po/pt_PT.po b/mobile/lock-setting/po/pt_PT.po new file mode 100644 index 0000000..5005ee3 --- /dev/null +++ b/mobile/lock-setting/po/pt_PT.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Ecrã bloqueado" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Ver notificações de eventos no ecrã bloqueado" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notificações de eventos" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Relógio" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Tempo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Definir atalhos no ecrã bloqueado" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Atalhos" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Rel. duplo" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Mostrar texto de ajuda no ecrã bloqueado" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Mostrar relógio duplo no ecrã bloqueado em roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Toque sem soltar no ecrã ao rodar o dispositivo para abrir a Câmara" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Acesso rápido à câmara" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Definir atalhos" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Arrastar e largar para alterar a ordem" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Seleccionar aplicação" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tocar no atalho para atribuir aplicação" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editar atalhos" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Texto de ajuda" + diff --git a/mobile/lock-setting/po/ro.po b/mobile/lock-setting/po/ro.po new file mode 100644 index 0000000..d0a832f --- /dev/null +++ b/mobile/lock-setting/po/ro.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Blocare ecran" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Vizualizaţi pe ecranul blocat notificările privind evenimentul" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Notificări eveniment" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Ceas" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Vreme" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Setare comenzi rapide în ecranul de blocare" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Comenzi rapide" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Ceas dual" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Afişare text asistenţă pe ecranul de blocare" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Afişare ceas dual pe ecranul de blocare în roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Ţineţi apăsat pe ecran şi rotiţi dispozitivul pentru a deschide Camera foto" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Acc. rapid la camera foto" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Setare comenzi rapide" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Glisaţi şi fixaţi pentru schimbarea ordinii" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Selectare aplicaţie" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Atingeţi comanda rapidă pentru a atribui aplicaţia" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Editare comenzi rapide" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Text asistenţă" + diff --git a/mobile/lock-setting/po/ru_RU.po b/mobile/lock-setting/po/ru_RU.po new file mode 100644 index 0000000..fb29213 --- /dev/null +++ b/mobile/lock-setting/po/ru_RU.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Экран блокировки" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Просмотр уведомлений о событиях на экране блокировки" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Уведомления о событиях" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Часы" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Погода" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Настроить ярлыки на экране блокировки" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Горячие клавиши" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Двойные часы" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Показывать текст справки на экране блокировки" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Показывать двойные часы на экране блокировки в роуминге" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Чтобы открыть камеру, прикоснитесь к экрану и, удерживая палец, поверните устройство" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Быстрый доступ к камере" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Задать ярлыки" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Используйте перетаскивание, чтобы изменить порядок" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Выбор приложения" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Нажмите ярлык, чтобы назначить приложение" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Изменить ссылки" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Текст справки" + diff --git a/mobile/lock-setting/po/sk.po b/mobile/lock-setting/po/sk.po new file mode 100644 index 0000000..5c28e7d --- /dev/null +++ b/mobile/lock-setting/po/sk.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Uzamknúť obrazovku" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Zobraziť oznámenia udalostí na zamknutej obrazovke" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Oznámenia udalostí" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Hodiny" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Počasie" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Nastaviť odkazy na zamknutej obrazovke" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Skratky" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Duálne hod." + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Zobraziť text pomocníka na zamknutej obrazovke" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Pri roamingu zobraziť na zamknutej obrazovke duálne hodiny" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Ťuknutím na obrazovku a jej podržaním počas otáčania zariadenia môžete otvoriť aplikáciu Fotoaparát" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Rýchly príst. cez fotoap." + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Nastaviť skratky" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Presunutím môžete zmeniť poradie" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Vyberte aplikáciu" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Ťuknutím na odkaz priraďte aplikáciu" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Upraviť odkazy" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Text pomocníka" + diff --git a/mobile/lock-setting/po/sl.po b/mobile/lock-setting/po/sl.po new file mode 100644 index 0000000..805afbc --- /dev/null +++ b/mobile/lock-setting/po/sl.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Zaklepanje zaslona" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Prikaz obvestil o dogodkih na zaklenjenem zaslonu" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Obvestila o dogodkih" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Ura" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Vreme" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Nastavi bližnjice na zaklenjenem zaslonu" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Bližnjice" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dvojna ura" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Pokaži besedilo za pomoč na zaklenjenem zaslonu" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Med gostovanjem pokaži dvojno uro na zaklenjenem zaslonu" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Pritisnite in pridržite prst na zaslonu in hkrati zavrtite napravo, da odprete kamero" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Hitri dostop do kamere" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Nastavi bližnjice" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Povlecite in spustite, če želite spremeniti vrstni red" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Izberite program" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Pritisnite bližnjico, da jo dodelite programu" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Uredi bližnjice" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Besedilo s pomočjo" + diff --git a/mobile/lock-setting/po/sr.po b/mobile/lock-setting/po/sr.po new file mode 100644 index 0000000..c74520f --- /dev/null +++ b/mobile/lock-setting/po/sr.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Zaključavanje ekrana" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Prikaži obaveštenja o događajima na zaključanom ekranu" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Obaveštenja o događaju" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Sat" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Vreme" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Postavi prečice na zaključanom ekranu" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Prečice" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dvostruki sat" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Prikaži tekst pomoći na zaključanom ekranu" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Prikaži dvostruki sat na zaključanom ekranu u romingu" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Kucni i zadrži ekran tokom rotiranja uređaja da bi otvorio/la kameru" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Brzi pristup na kameri" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Podesi prečice" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Prevuci i otpusti za promenu redosleda" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Izaberi aplikaciju" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Kucni prečicu za dodelu aplikacije" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Izmeni prečice" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Tekst pomoći" + diff --git a/mobile/lock-setting/po/sv.po b/mobile/lock-setting/po/sv.po new file mode 100644 index 0000000..ea54af4 --- /dev/null +++ b/mobile/lock-setting/po/sv.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Låsskärm" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Visa händelsemeddelanden på låsskärmen" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Händelsemeddelanden" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Klocka" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Väder" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Ställ in genvägar på låsskärmen" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Genvägar" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Dubbel klocka" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Visa hjälptexten på låsskärmen" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Visa dubbla klockor på låsskärmen vid roaming" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Tryck på och håll kvar på skärmen och rotera samtidigt enheten för att öppna Kameran" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Snabbåtkomst till kameran" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Ställ in genvägar" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Dra och släpp för att ändra ordning" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Välj program" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Tryck på genväg för att tilldela program" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Redigera genvägar" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Hjälptext" + diff --git a/mobile/lock-setting/po/tr_TR.po b/mobile/lock-setting/po/tr_TR.po new file mode 100644 index 0000000..8c5ab33 --- /dev/null +++ b/mobile/lock-setting/po/tr_TR.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Kilit ekranı" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Kilit ekranında etkinlik bildirimlerini gör" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Etkinlik bildirimleri" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Saat" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Hava" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Kısayolları kilit ekranında ayarla" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Kısayollar" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "İkili saat" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Yardım metnini kilit ekranında göster" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Dolaşımdayken kilit ekranında çift saat göster" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Kamerayı açmak için cihazı döndürürken ekrana dokunun ve basılı tutun" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Kameraya hızlı erişim" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Kısayol ayarla" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Sırayı değiştirmek için sürükle ve bırak" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Uygulama seç" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Uygulama atamak için kısayola dokun" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Kısayolları düzenle" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Yardım metni" + diff --git a/mobile/lock-setting/po/uk.po b/mobile/lock-setting/po/uk.po new file mode 100644 index 0000000..67ef257 --- /dev/null +++ b/mobile/lock-setting/po/uk.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Екран блокування" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Перегляд сповіщень про події на екрані блокування" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Сповіщення про події" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Годинник" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Погода" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Встановлення клавіш швидкого доступу на екрані блокування" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Швидкий доступ" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Подвійний годинник" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Відображення тексту довідки на екрані блокування" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Відображення подвійного годинника на екрані блокування під час перебування в роумінгу" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Натисніть і утримуйте екран, одночасно обертаючи пристрій, щоб відкрити камеру" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Швидкий доступ до камери" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Встановлення клавіш швидкого доступу" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Перетягніть, щоб змінити порядок" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Виберіть програму" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Натисніть клавішу швидкого доступу, щоб призначити програму" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Редагувати клавіші шв. доступу" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Текст довідки" + diff --git a/mobile/lock-setting/po/uz.po b/mobile/lock-setting/po/uz.po new file mode 100644 index 0000000..280ac1b --- /dev/null +++ b/mobile/lock-setting/po/uz.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "Bloklash ekrani" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "Bloklash ekranida hodisa bildirshnomalarini ko‘rib chiqish" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "Hodisa bildirishnomalari" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "Soat" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "Ob-havo" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "Bloklash ekranida yorliqlarni o‘rnatish" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "Yorliqlar" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "Ikkitali soat" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "Bloklash ekranida yordam matnini ko‘rsatish" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "Rouming vaqtida bloklash ekarnida ikkitali soatni ko‘rsat" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "Kamerani ochish uchun, aylantirish vaqtida ekranni bosib turing" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "Kameraga tezkor kirish" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "Yorliqlarni o‘rnatish" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "Tartibni o‘zgartirish uchun tortib o‘tkazing" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "Ilova tanlash" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "Ilovani tayinlash uchun yorliqni tanlang" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "Yorliqlarni tahrirlash" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "Yordam matni" + diff --git a/mobile/lock-setting/po/zh_CN.po b/mobile/lock-setting/po/zh_CN.po new file mode 100644 index 0000000..776d32c --- /dev/null +++ b/mobile/lock-setting/po/zh_CN.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "锁定屏幕" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "在锁屏上查看事件通知" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "事件通知" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "时钟" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "天气" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "设置屏幕锁定时的快捷键" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "快捷键" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "双时钟" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "在锁定屏幕时显示帮助文本" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "漫游时在锁屏上显示双时钟" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "点击并按住屏幕同时旋转手机以打开摄像头" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "照相机快速访问" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "设置快捷方式" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "用拖放的方式调整顺序" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "选择应用程序" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "点击快捷方式分配应用程序" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "编辑快捷方式" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "帮助文本" + diff --git a/mobile/lock-setting/po/zh_HK.po b/mobile/lock-setting/po/zh_HK.po new file mode 100644 index 0000000..53b912e --- /dev/null +++ b/mobile/lock-setting/po/zh_HK.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "鎖定螢幕" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "於鎖定螢幕上檢視事件通知" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "事件通知" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "時鐘" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "天氣" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "在鎖定螢幕上設定捷徑" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "捷徑" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "雙時鐘" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "於鎖定螢幕顯示說明文字" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "當漫遊時在鎖定螢幕上顯示雙時鐘" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "輕觸並按住螢幕同時旋轉裝置以開啟相機" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "相機快速捷徑" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "設定捷徑" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "拖放以更改順序" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "選擇應用程式" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "輕觸捷徑以指定應用程式" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "編輯捷徑" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "說明文字" + diff --git a/mobile/lock-setting/po/zh_SG.po b/mobile/lock-setting/po/zh_SG.po new file mode 100644 index 0000000..c78be58 --- /dev/null +++ b/mobile/lock-setting/po/zh_SG.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "锁定屏幕" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "在锁屏上查看事件通知" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "事件通知" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "时钟" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "天气" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "设置锁屏快捷方式" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "快捷键" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "双时钟" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "在锁定屏幕上显示帮助文本" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "漫游时在锁屏上显示双时钟" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "轻敲并按住屏幕同时旋转设备以打开摄像头" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "摄像头快速访问" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "设置快捷方式" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "用拖放的方式调整顺序" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "选择应用程序" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "轻敲快捷方式分配应用程序" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "编辑快捷键" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "帮助文本" + diff --git a/mobile/lock-setting/po/zh_TW.po b/mobile/lock-setting/po/zh_TW.po new file mode 100644 index 0000000..5859f7f --- /dev/null +++ b/mobile/lock-setting/po/zh_TW.po @@ -0,0 +1,54 @@ +msgid "IDS_ST_BODY_LOCK_SCREEN" +msgstr "鎖定螢幕" + +msgid "IDS_IDLE_BODY_VIEW_EVENT_NOTIFICATIONS_ON_THE_LOCK_SCREEN" +msgstr "於鎖定螢幕上檢視活動通知" + +msgid "IDS_IDLE_MBODY_EVENT_NOTIFICATIONS" +msgstr "活動通知" + +msgid "IDS_ST_BODY_CLOCK" +msgstr "時鐘" + +msgid "IDS_ST_BODY_WEATHER" +msgstr "氣象" + +msgid "IDS_ST_BODY_SET_SHORTCUTS_ON_LOCK_SCREEN" +msgstr "在鎖定螢幕上設定捷徑" + +msgid "IDS_ST_BODY_SHORTCUTS" +msgstr "捷徑" + +msgid "IDS_ST_BODY_DUAL_CLOCK" +msgstr "雙時鐘" + +msgid "IDS_ST_BODY_SHOW_HELP_TEXT_ON_LOCK_SCREEN" +msgstr "於鎖定螢幕顯示說明文字" + +msgid "IDS_ST_BODY_SHOW_DUAL_CLOCK_ON_LOCK_SCREEN_WHEN_ROAMING" +msgstr "漫遊時在鎖定螢幕上顯示雙時鐘" + +msgid "IDS_ST_BODY_TAP_AND_HOLD_THE_SCREEN_WHILE_ROTATING_THE_DEVICE_TO_OPEN_CAMERA" +msgstr "輕觸並按住螢幕同時旋轉裝置以開啟相機" + +msgid "IDS_ST_MBODY_CAMERA_QUICK_ACCESS" +msgstr "相機快速捷徑" + +msgid "IDS_ST_BODY_SET_SHORTCUTS" +msgstr "設定捷徑" + +msgid "IDS_ST_BODY_DRAG_AND_DROP_TO_CHANGE_ORDER" +msgstr "拖放以變更順序" + +msgid "IDS_ST_BODY_SELECT_APPLICATION" +msgstr "選擇應用程式" + +msgid "IDS_ST_BODY_TAP_SHORTCUT_TO_ASSIGN_APPLICATION" +msgstr "輕觸捷徑以指定應用程式" + +msgid "IDS_ST_OPT_EDIT_SHORTCUTS" +msgstr "編輯快捷鍵" + +msgid "IDS_IM_BODY_HELP_TEXT" +msgstr "說明文字" + diff --git a/mobile/packaging/starter.spec b/mobile/packaging/starter.spec new file mode 100644 index 0000000..965f4d9 --- /dev/null +++ b/mobile/packaging/starter.spec @@ -0,0 +1,110 @@ +Name: starter +Summary: starter +Version: 0.4.62 +Release: 3 +Group: TO_BE/FILLED_IN +License: TO_BE/FILLED_IN +Source0: starter-%{version}.tar.gz +Requires(post): /usr/bin/vconftool +BuildRequires: cmake +BuildRequires: pkgconfig(ail) +BuildRequires: pkgconfig(appcore-efl) +BuildRequires: pkgconfig(aul) +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-system-media-key) +BuildRequires: pkgconfig(db-util) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(ecore) +BuildRequires: pkgconfig(edje) +BuildRequires: pkgconfig(eet) +BuildRequires: pkgconfig(eina) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(evas) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(heynoti) +BuildRequires: pkgconfig(sysman) +BuildRequires: pkgconfig(syspopup-caller) +BuildRequires: pkgconfig(tapi) +BuildRequires: pkgconfig(ui-gadget-1) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(vconf) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xcomposite) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(capi-system-info) +BuildRequires: pkgconfig(pkgmgr-info) +BuildRequires: pkgconfig(libsystemd-daemon) + +BuildRequires: cmake +BuildRequires: edje-bin +BuildRequires: gettext-tools + +Requires(post): /usr/bin/vconftool + +%description +Description: Starter + + +%prep +%setup -q + +%cmake . + +%build + +make -j1 +%install +rm -rf %{buildroot} +%make_install + +mkdir -p %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants +mkdir -p %{buildroot}%{_libdir}/systemd/user/sockets.target.wants +ln -s ../starter.path %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/starter.path +ln -s ../starter.service %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/starter.service +ln -s ../starter.socket %{buildroot}%{_libdir}/systemd/user/sockets.target.wants/starter.socket +mkdir -p %{buildroot}/usr/share/license +mkdir -p %{buildroot}/opt/data/home-daemon + +cp LICENSE.Flora %{buildroot}/usr/share/license/%{name} + +%post +change_file_executable() +{ + chmod +x $@ 2>/dev/null + if [ $? -ne 0 ]; then + echo "Failed to change the perms of $@" + fi +} + +GOPTION="-u 5000 -f" + +vconftool set -t int "memory/starter/sequence" 0 -i $GOPTION +vconftool set -t int "memory/starter/use_volume_key" 0 -i $GOPTION +vconftool set -t string file/private/lockscreen/pkgname "org.tizen.lockscreen" -u 5000 -g 5000 -f +vconftool set -t int memory/idle_lock/state "0" -i $GOPTION +vconftool set -t bool memory/lockscreen/phone_lock_verification 0 -i $GOPTION + +vconftool set -t bool db/lockscreen/event_notification_display 1 $GOPTION +vconftool set -t bool db/lockscreen/clock_display 1 $GOPTION +vconftool set -t bool db/lockscreen/help_text_display 0 $GOPTION + +vconftool set -t int memory/idle-screen/is_idle_screen_launched "0" -i -u 5000 -f +vconftool set -t int memory/idle-screen/top "0" -i -f +vconftool set -t int memory/idle-screen/safemode "0" -i -f + +%files +%manifest starter.manifest +%defattr(-,root,root,-) +%{_bindir}/starter +/usr/ug/lib/libug-lockscreen-options.so +/usr/ug/lib/libug-lockscreen-options.so.0.1.0 +/usr/ug/res/locale/*/LC_MESSAGES/* +%{_libdir}/systemd/user/starter.path +%{_libdir}/systemd/user/starter.service +%{_libdir}/systemd/user/starter.socket +%{_libdir}/systemd/user/core-efl.target.wants/starter.path +%{_libdir}/systemd/user/core-efl.target.wants/starter.service +%{_libdir}/systemd/user/sockets.target.wants/starter.socket +/usr/share/license/%{name} +/opt/data/home-daemon +/opt/etc/smack/accesses.d/starter.rule diff --git a/mobile/src/hw_key.c b/mobile/src/hw_key.c new file mode 100644 index 0000000..14361bf --- /dev/null +++ b/mobile/src/hw_key.c @@ -0,0 +1,323 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <ail.h> +#include <bundle.h> +#include <Elementary.h> +#include <Ecore_X.h> +#include <Ecore_Input.h> +#include <sysman.h> +#include <syspopup_caller.h> +#include <utilX.h> +#include <vconf.h> +#include <system/media_key.h> + +#include "hw_key.h" +#include "menu_daemon.h" +#include "util.h" + +#define TASKMGR_PKG_NAME "org.tizen.taskmgr" +#define CAMERA_PKG_NAME "org.tizen.camera-app" +#define CALLLOG_PKG_NAME "org.tizen.calllog" +#define MUSIC_PLAYER_PKG_NAME "org.tizen.music-player" + + + +static struct { + Ecore_X_Window win; + Ecore_Event_Handler *key_up; + Ecore_Event_Handler *key_down; + Ecore_Timer *long_press; + Ecore_Timer *single_timer; + Ecore_Timer *volume_up_long_press; + Ecore_Timer *volume_down_long_press; + Eina_Bool cancel; +} key_info = { + .win = 0x0, + .key_up = NULL, + .key_down = NULL, + .long_press = NULL, + .single_timer = NULL, + .volume_up_long_press = NULL, + .volume_down_long_press = NULL, + .cancel = EINA_FALSE, +}; + + + +static Eina_Bool _launch_taskmgr_cb(void* data) +{ + int val1 = -1; + int val2 = -1; + _D("Launch TASKMGR"); + + key_info.long_press = NULL; + + if (vconf_get_int(VCONFKEY_PM_STATE, &val1) < 0) { + _E("Cannot get VCONFKEY_PM_STATE"); + return ECORE_CALLBACK_CANCEL; + } + if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val2) < 0) { + _E("Cannot get VCONFKEY_IDLE_LOCK_STATE"); + return ECORE_CALLBACK_CANCEL; + } + + if ((val1 == VCONFKEY_PM_STATE_NORMAL) && (val2 == VCONFKEY_IDLE_UNLOCK)) { + _D("LCD ON, UNLOCK state => launch taskmgr"); + syspopup_destroy_all(); + if (menu_daemon_open_app(TASKMGR_PKG_NAME) < 0) + _E("Failed to launch the taskmgr"); + } else { + _D("Can't launch TASKMGR pm state : %d lock state : %d", val1, val2); + } + + return ECORE_CALLBACK_CANCEL; +} + + + +static Eina_Bool _launch_by_home_key(void *data) +{ + key_info.single_timer = NULL; + syspopup_destroy_all(); + menu_daemon_open_homescreen(NULL); + return ECORE_CALLBACK_CANCEL; +} + + + +inline static int _release_home_key(void) +{ + syspopup_destroy_all(); + retv_if(NULL == key_info.long_press, EXIT_SUCCESS); + ecore_timer_del(key_info.long_press); + key_info.long_press = NULL; + + if (NULL == key_info.single_timer) { + key_info.single_timer = ecore_timer_add(0.3, _launch_by_home_key, NULL); + return EXIT_SUCCESS; + } + ecore_timer_del(key_info.single_timer); + key_info.single_timer = NULL; + + return EXIT_SUCCESS; +} + + + +inline static void _release_multimedia_key(const char *value) +{ + ret_if(NULL == value); + + _D("Multimedia key is released with %s", value); + + bundle *b; + b = bundle_create(); + if (!b) { + _E("Cannot create bundle"); + return; + } + bundle_add(b, "multimedia_key", value); + + int ret; + ret = menu_daemon_launch_app(MUSIC_PLAYER_PKG_NAME, b); + if (ret < 0) + _E("Failed to launch the running apps, ret : %d", ret); + + bundle_free(b); +} + + + +static Eina_Bool _key_release_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Up *ev = event; + int val = -1; + + _D("Released"); + + if (!ev) { + _D("Invalid event object"); + return ECORE_CALLBACK_RENEW; + } + + if (!strcmp(ev->keyname, KEY_END)) { + } else if (!strcmp(ev->keyname, KEY_CONFIG)) { + } else if (!strcmp(ev->keyname, KEY_SEND)) { + } else if (!strcmp(ev->keyname, KEY_HOME)) { + + if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { + _D("Cannot get VCONFKEY_IDLE_LOCK_STATE"); + } + if (val == VCONFKEY_IDLE_LOCK) { + _D("lock state, ignore home key..!!"); + return ECORE_CALLBACK_RENEW; + } + + if (EINA_TRUE == key_info.cancel) { + _D("Cancel key is activated"); + if (key_info.long_press) { + ecore_timer_del(key_info.long_press); + key_info.long_press = NULL; + } + + if (key_info.single_timer) { + ecore_timer_del(key_info.single_timer); + key_info.single_timer = NULL; + } + + return ECORE_CALLBACK_RENEW; + } + + _release_home_key(); + } else if (!strcmp(ev->keyname, KEY_PAUSE)) { + } else if (!strcmp(ev->keyname, KEY_CANCEL)) { + _D("CANCEL Key is released"); + key_info.cancel = EINA_FALSE; + } else if (!strcmp(ev->keyname, KEY_MEDIA)) { + _release_multimedia_key("KEY_PLAYCD"); + } + + return ECORE_CALLBACK_RENEW; +} + + + +static Eina_Bool _key_press_cb(void *data, int type, void *event) +{ + Evas_Event_Key_Down *ev = event; + int val = -1; + + _D("Pressed"); + + if (!ev) { + _D("Invalid event object"); + return ECORE_CALLBACK_RENEW; + } + + if (!strcmp(ev->keyname, KEY_SEND)) { + _D("Launch calllog"); + if (menu_daemon_open_app(CALLLOG_PKG_NAME) < 0) + _E("Failed to launch %s", CALLLOG_PKG_NAME); + } else if(!strcmp(ev->keyname, KEY_CONFIG)) { + _D("Launch camera"); + if (menu_daemon_open_app(CAMERA_PKG_NAME) < 0) + _E("Failed to launch %s", CAMERA_PKG_NAME); + } else if (!strcmp(ev->keyname, KEY_HOME)) { + if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { + _D("Cannot get VCONFKEY_IDLE_LOCK_STATE"); + } + if (val == VCONFKEY_IDLE_LOCK) { + _D("lock state, ignore home key..!!"); + return ECORE_CALLBACK_RENEW; + } + if (key_info.long_press) { + ecore_timer_del(key_info.long_press); + key_info.long_press = NULL; + } + + syspopup_destroy_all(); + + key_info.long_press = ecore_timer_add(0.5, _launch_taskmgr_cb, NULL); + if (!key_info.long_press) + _E("Failed to add timer for long press detection"); + } else if (!strcmp(ev->keyname, KEY_CANCEL)) { + _D("Cancel button is pressed"); + key_info.cancel = EINA_TRUE; + } else if (!strcmp(ev->keyname, KEY_MEDIA)) { + _D("Media key is pressed"); + } + + return ECORE_CALLBACK_RENEW; +} + + + +void _media_key_event_cb(media_key_e key, media_key_event_e status, void *user_data) +{ + _D("MEDIA KEY EVENT"); + if (MEDIA_KEY_STATUS_PRESSED == status) return; + + if (MEDIA_KEY_PAUSE == key) { + _release_multimedia_key("KEY_PAUSECD"); + } else if (MEDIA_KEY_PLAY == key) { + _release_multimedia_key("KEY_PLAYCD"); + } +} + + + +void create_key_window(void) +{ + key_info.win = ecore_x_window_input_new(0, -10000, -10000, 1, 1); + if (!key_info.win) { + _D("Failed to create hidden window"); + return; + } + //ecore_x_event_mask_unset(key_info.win, ECORE_X_EVENT_MASK_NONE); + ecore_x_icccm_title_set(key_info.win, "menudaemon,key,receiver"); + ecore_x_netwm_name_set(key_info.win, "menudaemon,key,receiver"); + ecore_x_netwm_pid_set(key_info.win, getpid()); + ecore_x_flush(); + + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_HOME, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG, SHARED_GRAB); + utilx_grab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA, SHARED_GRAB); + + key_info.key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL); + if (!key_info.key_up) + _D("Failed to register a key up event handler"); + + key_info.key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_press_cb, NULL); + if (!key_info.key_down) + _D("Failed to register a key down event handler"); + + media_key_reserve(_media_key_event_cb, NULL); +} + + + +void destroy_key_window(void) +{ + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_HOME); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEDOWN); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_VOLUMEUP); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_CONFIG); + utilx_ungrab_key(ecore_x_display_get(), key_info.win, KEY_MEDIA); + + if (key_info.key_up) { + ecore_event_handler_del(key_info.key_up); + key_info.key_up = NULL; + } + + if (key_info.key_down) { + ecore_event_handler_del(key_info.key_down); + key_info.key_down = NULL; + } + + ecore_x_window_delete_request_send(key_info.win); + key_info.win = 0x0; + + media_key_release(); +} + + + +// End of a file diff --git a/mobile/src/lock-daemon.c b/mobile/src/lock-daemon.c new file mode 100644 index 0000000..d3908a5 --- /dev/null +++ b/mobile/src/lock-daemon.c @@ -0,0 +1,674 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <Elementary.h> + +#include <vconf.h> +#include <vconf-keys.h> +#include <systemd/sd-daemon.h> +#include <glib.h> +#include <poll.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> +#include <unistd.h> +#include <sys/param.h> +#include <errno.h> + +#include "lockd-debug.h" +#include "lock-daemon.h" +#include "lockd-process-mgr.h" +#include "lockd-window-mgr.h" +#include "starter-util.h" +#include "menu_daemon.h" + +static int phone_lock_pid; + +struct lockd_data { + int lock_app_pid; + int phone_lock_app_pid; + int lock_type; + Eina_Bool request_recovery; + lockw_data *lockw; + GPollFD *gpollfd; +}; + +#define PHLOCK_SOCK_PREFIX "/tmp/phlock" +#define PHLOCK_SOCK_MAXBUFF 65535 +#define PHLOCK_APP_CMDLINE "/usr/apps/org.tizen.lockscreen/bin/lockscreen" +#define PHLOCK_UNLOCK_CMD "unlock" +#define PHLOCK_LAUNCH_CMD "launch_phone_lock" +#define LAUNCH_INTERVAL 100*1000 + +static int lockd_launch_app_lockscreen(struct lockd_data *lockd); + +static void lockd_unlock_lockscreen(struct lockd_data *lockd); + +static int _lockd_get_lock_type(void) +{ + int lock_type = 0; + int ret = 0; + + vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &lock_type); + + if (lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD || + lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD) { + ret = 1; + } else if (lock_type == SETTING_SCREEN_LOCK_TYPE_SWIPE || + lock_type == SETTING_SCREEN_LOCK_TYPE_MOTION) { + ret = 0; + } else { + ret = 2; + } + + LOCKD_DBG("_lockd_get_lock_type ret(%d), lock_type (%d)", ret, lock_type); + + return ret; +} + +static void _lockd_notify_pm_state_cb(keynode_t * node, void *data) +{ + LOCKD_DBG("PM state Notification!!"); + + struct lockd_data *lockd = (struct lockd_data *)data; + int val = -1; + + if (lockd == NULL) { + LOCKD_ERR("lockd is NULL"); + return; + } + + if (vconf_get_int(VCONFKEY_PM_STATE, &val) < 0) { + LOCKD_ERR("Cannot get VCONFKEY_PM_STATE"); + return; + } + + if (val == VCONFKEY_PM_STATE_LCDOFF) { + lockd->lock_type = _lockd_get_lock_type(); + lockd_launch_app_lockscreen(lockd); + } +} + +static void +_lockd_notify_lock_state_cb(keynode_t * node, void *data) +{ + LOCKD_DBG("lock state changed!!"); + + struct lockd_data *lockd = (struct lockd_data *)data; + int val = -1; + + if (lockd == NULL) { + LOCKD_ERR("lockd is NULL"); + return; + } + + if (vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val) < 0) { + LOCKD_ERR("Cannot get VCONFKEY_IDLE_LOCK_STATE"); + return; + } + + if (val == VCONFKEY_IDLE_UNLOCK) { + LOCKD_DBG("unlocked..!!"); + if (lockd->lock_app_pid != 0) { + LOCKD_DBG("terminate lock app..!!"); + lockd_process_mgr_terminate_lock_app(lockd->lock_app_pid, 1); + } + } +} + +static Eina_Bool lockd_set_lock_state_cb(void *data) +{ + LOCKD_DBG("%s, %d", __func__, __LINE__); + vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_LOCK); + return ECORE_CALLBACK_CANCEL; +} + +static void +_lockd_notify_phone_lock_verification_cb(keynode_t * node, void *data) +{ + LOCKD_DBG("%s, %d", __func__, __LINE__); + + struct lockd_data *lockd = (struct lockd_data *)data; + int val = -1; + + if (lockd == NULL) { + LOCKD_ERR("lockd is NULL"); + return; + } + + if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) { + LOCKD_ERR("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); + return; + } + + if (val == TRUE) { + lockd_window_mgr_finish_lock(lockd->lockw); + vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); + } +} + +static int lockd_app_dead_cb(int pid, void *data) +{ + LOCKD_DBG("app dead cb call! (pid : %d)", pid); + + struct lockd_data *lockd = (struct lockd_data *)data; + + if (pid == lockd->lock_app_pid) { + LOCKD_DBG("lock app(pid:%d) is destroyed.", pid); + + lockd_unlock_lockscreen(lockd); + } + + menu_daemon_check_dead_signal(pid); + + return 0; + +} + +static Eina_Bool lockd_app_create_cb(void *data, int type, void *event) +{ + struct lockd_data *lockd = (struct lockd_data *)data; + + if (lockd == NULL) { + return ECORE_CALLBACK_PASS_ON; + } + LOCKD_DBG("%s, %d", __func__, __LINE__); + if (lockd_window_set_window_effect(lockd->lockw, lockd->lock_app_pid, + event) == EINA_TRUE) { + if(lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, + event) == EINA_FALSE) { + LOCKD_ERR("window is not matched..!!"); + } + } + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool lockd_app_show_cb(void *data, int type, void *event) +{ + struct lockd_data *lockd = (struct lockd_data *)data; + + if (lockd == NULL) { + return EINA_TRUE; + } + LOCKD_DBG("%s, %d", __func__, __LINE__); + if (lockd_window_set_window_property(lockd->lockw, lockd->lock_app_pid, + event)) { + ecore_idler_add(lockd_set_lock_state_cb, NULL); + } + return EINA_FALSE; +} + +static int lockd_launch_app_lockscreen(struct lockd_data *lockd) +{ + LOCKD_DBG("launch app lock screen"); + + int call_state = -1, phlock_state = -1, factory_mode = -1, test_mode = -1; + int r = 0; + + WRITE_FILE_LOG("%s", "Launch lockscreen in starter"); + + if (lockd_process_mgr_check_lock(lockd->lock_app_pid) == TRUE) { + LOCKD_DBG("Lock Screen App is already running."); + r = lockd_process_mgr_restart_lock(lockd->lock_type); + if (r < 0) { + LOCKD_DBG("Restarting Lock Screen App is fail [%d].", r); + usleep(LAUNCH_INTERVAL); + } else { + LOCKD_DBG("Restarting Lock Screen App, pid[%d].", r); + return 1; + } + } + + vconf_get_int(VCONFKEY_CALL_STATE, &call_state); + if (call_state != VCONFKEY_CALL_OFF) { + LOCKD_DBG + ("Current call state(%d) does not allow to launch lock screen.", + call_state); + return 0; + } + + lockd->lock_app_pid = + lockd_process_mgr_start_lock(lockd, lockd_app_dead_cb, + lockd->lock_type); + if (lockd->lock_app_pid < 0) + return 0; + lockd_window_mgr_finish_lock(lockd->lockw); + lockd_window_mgr_ready_lock(lockd, lockd->lockw, lockd_app_create_cb, + lockd_app_show_cb); + + return 1; +} + +static void lockd_unlock_lockscreen(struct lockd_data *lockd) +{ + LOCKD_DBG("unlock lock screen"); + lockd->lock_app_pid = 0; + + vconf_set_int(VCONFKEY_IDLE_LOCK_STATE, VCONFKEY_IDLE_UNLOCK); + lockd_window_mgr_finish_lock(lockd->lockw); +} + +inline static void lockd_set_sock_option(int fd, int cli) +{ + int size; + int ret; + struct timeval tv = { 1, 200 * 1000 }; + + size = PHLOCK_SOCK_MAXBUFF; + ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)); + if(ret != 0) + return; + ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)); + if(ret != 0) + return; + if (cli) { + ret = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + if(ret != 0) + return; + } +} + +static int lockd_create_sock(void) +{ + struct sockaddr_un saddr; + int fd; + + int n = sd_listen_fds(1); + if (n > 1) { + LOCKD_DBG("too many file descriptors received"); + return -1; + } else if (n == 1) { + int r; + if ((r = sd_is_socket_unix(SD_LISTEN_FDS_START, SOCK_STREAM, 1, PHLOCK_SOCK_PREFIX, 0)) <= 0) { + LOCKD_DBG("passed systemd file descriptor is of wrong type"); + return -1; + } + fd = SD_LISTEN_FDS_START + 0; + } else { + fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) { + if (errno == EINVAL) { + fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) { + LOCKD_DBG("second chance - socket create error"); + return -1; + } + } else { + LOCKD_DBG("socket error"); + return -1; + } + } + + bzero(&saddr, sizeof(saddr)); + saddr.sun_family = AF_UNIX; + + strncpy(saddr.sun_path, PHLOCK_SOCK_PREFIX, strlen(PHLOCK_SOCK_PREFIX)); + saddr.sun_path[strlen(PHLOCK_SOCK_PREFIX)] = 0; + + unlink(saddr.sun_path); + + if (bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { + LOCKD_DBG("bind error"); + close(fd); + return -1; + } + + if (chmod(saddr.sun_path, (S_IRWXU | S_IRWXG | S_IRWXO)) < 0) { + LOCKD_DBG("failed to change the socket permission"); + close(fd); + return -1; + } + + lockd_set_sock_option(fd, 0); + + if (listen(fd, 10) == -1) { + LOCKD_DBG("listen error"); + close(fd); + return -1; + } + } + return fd; +} + +static gboolean lockd_glib_check(GSource * src) +{ + GSList *fd_list; + GPollFD *tmp; + + fd_list = src->poll_fds; + do { + tmp = (GPollFD *) fd_list->data; + if ((tmp->revents & (POLLIN | POLLPRI))) + return TRUE; + fd_list = fd_list->next; + } while (fd_list); + + return FALSE; +} + +static char *lockd_read_cmdline_from_proc(int pid) +{ + int memsize = 32; + char path[32]; + char *cmdline = NULL, *tempptr = NULL; + FILE *fp = NULL; + + snprintf(path, sizeof(path), "/proc/%d/cmdline", pid); + + fp = fopen(path, "r"); + if (fp == NULL) { + LOCKD_DBG("Cannot open cmdline on pid[%d]", pid); + return NULL; + } + + cmdline = malloc(32); + if (cmdline == NULL) { + LOCKD_DBG("%s", "Out of memory"); + fclose(fp); + return NULL; + } + + bzero(cmdline, memsize); + if (fgets(cmdline, 32, fp) == NULL) { + LOCKD_DBG("%s", "Cannot read cmdline"); + free(cmdline); + fclose(fp); + return NULL; + } + + while (cmdline[memsize - 2] != 0) { + cmdline[memsize - 1] = (char)fgetc(fp); + tempptr = realloc(cmdline, memsize + 32); + if (tempptr == NULL) { + fclose(fp); + LOCKD_DBG("%s", "Out of memory"); + return NULL; + } + cmdline = tempptr; + bzero(cmdline + memsize, 32); + fgets(cmdline + memsize, 32, fp); + memsize += 32; + } + + if (fp != NULL) + fclose(fp); + return cmdline; +} + +static int lockd_sock_handler(void *data) +{ + int cl; + int len; + int sun_size; + int clifd = -1; + char cmd[PHLOCK_SOCK_MAXBUFF]; + char *cmdline = NULL; + int val = -1; + int fd = -1; + int recovery_state = -1; + GPollFD *gpollfd; + + struct ucred cr; + struct sockaddr_un lockd_addr; + struct lockd_data *lockd = (struct lockd_data *)data; + + if ((lockd == NULL) || (lockd->gpollfd == NULL)) { + LOCKD_DBG("lockd->gpollfd is NULL"); + return -1; + } + gpollfd = (GPollFD *)lockd->gpollfd; + fd = gpollfd->fd; + + cl = sizeof(cr); + sun_size = sizeof(struct sockaddr_un); + + if ((clifd = + accept(fd, (struct sockaddr *)&lockd_addr, + (socklen_t *) & sun_size)) == -1) { + if (errno != EINTR) + LOCKD_DBG("accept error"); + return -1; + } + + if (getsockopt(clifd, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) & cl) + < 0) { + LOCKD_DBG("peer information error"); + close(clifd); + return -1; + } + LOCKD_DBG("Peer's pid=%d, uid=%d, gid=%d\n", cr.pid, cr.uid, cr.gid); + + memset(cmd, 0, PHLOCK_SOCK_MAXBUFF); + + lockd_set_sock_option(clifd, 1); + + len = recv(clifd, cmd, PHLOCK_SOCK_MAXBUFF, 0); + cmd[PHLOCK_SOCK_MAXBUFF - 1] = '\0'; + + if (len != strlen(cmd)) { + LOCKD_DBG("recv error %d %d", len, strlen(cmd)); + close(clifd); + return -1; + } + + LOCKD_DBG("cmd %s", cmd); + + cmdline = lockd_read_cmdline_from_proc(cr.pid); + if (cmdline == NULL) { + LOCKD_DBG("Error on opening /proc/%d/cmdline", cr.pid); + close(clifd); + return -1; + } + + LOCKD_DBG("/proc/%d/cmdline : %s", cr.pid, cmdline); + LOCKD_DBG("phone_lock_pid : %d vs cr.pid : %d", phone_lock_pid, cr.pid); + + if ((!strncmp(cmdline, PHLOCK_APP_CMDLINE, strlen(cmdline))) + && (!strncmp(cmd, PHLOCK_UNLOCK_CMD, strlen(cmd)))) { + LOCKD_DBG("cmd is %s\n", PHLOCK_UNLOCK_CMD); + + if (phone_lock_pid == cr.pid) { + LOCKD_DBG("pid [%d] %s is verified, unlock..!!\n", cr.pid, + cmdline); + lockd_process_mgr_terminate_phone_lock(phone_lock_pid); + phone_lock_pid = 0; + vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, TRUE); + } + } else if (!strncmp(cmd, PHLOCK_LAUNCH_CMD, strlen(cmd))) { + LOCKD_DBG("cmd is %s\n", PHLOCK_LAUNCH_CMD); + if (_lockd_get_lock_type() == 1) { + lockd->lock_type = 1; + lockd_launch_app_lockscreen(lockd); + } + } + + if(cmdline != NULL) { + free(cmdline); + cmdline = NULL; + } + + close(clifd); + return 0; +} + +static gboolean lockd_glib_handler(gpointer data) +{ + if (lockd_sock_handler(data) < 0) { + LOCKD_DBG("lockd_sock_handler is failed..!!"); + } + return TRUE; +} + +static gboolean lockd_glib_dispatch(GSource * src, GSourceFunc callback, + gpointer data) +{ + callback(data); + return TRUE; +} + +static gboolean lockd_glib_prepare(GSource * src, gint * timeout) +{ + return FALSE; +} + +static GSourceFuncs funcs = { + .prepare = lockd_glib_prepare, + .check = lockd_glib_check, + .dispatch = lockd_glib_dispatch, + .finalize = NULL +}; + +static int lockd_init_sock(struct lockd_data *lockd) +{ + int fd; + GPollFD *gpollfd; + GSource *src; + int ret; + + fd = lockd_create_sock(); + if (fd < 0) { + LOCKD_DBG("lock daemon create sock failed..!!"); + } + + src = g_source_new(&funcs, sizeof(GSource)); + + gpollfd = (GPollFD *) g_malloc(sizeof(GPollFD)); + gpollfd->events = POLLIN; + gpollfd->fd = fd; + + lockd->gpollfd = gpollfd; + + g_source_add_poll(src, lockd->gpollfd); + g_source_set_callback(src, (GSourceFunc) lockd_glib_handler, + (gpointer) lockd, NULL); + g_source_set_priority(src, G_PRIORITY_LOW); + + ret = g_source_attach(src, NULL); + if (ret == 0) + return -1; + + g_source_unref(src); + + return 0; +} + +static void lockd_init_vconf(struct lockd_data *lockd) +{ + int val = -1; + + if (vconf_notify_key_changed + (VCONFKEY_PM_STATE, _lockd_notify_pm_state_cb, lockd) != 0) { + LOCKD_ERR("Fail vconf_notify_key_changed : VCONFKEY_PM_STATE"); + } + + if (vconf_notify_key_changed + (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, + _lockd_notify_phone_lock_verification_cb, lockd) != 0) { + if (vconf_get_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, &val) < 0) { + LOCKD_ERR + ("Cannot get %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); + vconf_set_bool(VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, 0); + if (vconf_notify_key_changed + (VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION, + _lockd_notify_phone_lock_verification_cb, + lockd) != 0) { + LOCKD_ERR + ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); + } + } else { + LOCKD_ERR + ("Fail vconf_notify_key_changed : %s", VCONFKEY_LOCKSCREEN_PHONE_LOCK_VERIFICATION); + } + } + + if (vconf_notify_key_changed + (VCONFKEY_IDLE_LOCK_STATE, + _lockd_notify_lock_state_cb, + lockd) != 0) { + LOCKD_ERR + ("[Error] vconf notify : lock state"); + } +} + +static void lockd_start_lock_daemon(void *data) +{ + struct lockd_data *lockd = NULL; + int r = 0; + + lockd = (struct lockd_data *)data; + + if (!lockd) { + return; + } + + LOCKD_DBG("%s, %d", __func__, __LINE__); + + lockd_init_vconf(lockd); + + r = lockd_init_sock(lockd); + if (r < 0) { + LOCKD_DBG("lockd init socket failed: %d", r); + } + + lockd->lockw = lockd_window_init(); + + aul_listen_app_dead_signal(lockd_app_dead_cb, data); + + LOCKD_DBG("%s, %d", __func__, __LINE__); +} + +int start_lock_daemon(int launch_lock) +{ + struct lockd_data *lockd = NULL; + int val = -1; + int recovery_state = -1; + int first_boot = 0; + int lock_type = 0; + int ret = 0; + + LOCKD_DBG("%s, %d", __func__, __LINE__); + + lockd = (struct lockd_data *)malloc(sizeof(struct lockd_data)); + memset(lockd, 0x0, sizeof(struct lockd_data)); + lockd_start_lock_daemon(lockd); + + if (launch_lock == FALSE) { + LOCKD_DBG("Don't launch lockscreen.."); + return 0; + } + + if (vconf_get_bool(VCONFKEY_PWLOCK_FIRST_BOOT, &first_boot) < 0) { + LOCKD_ERR("Cannot get %s vconfkey", VCONFKEY_PWLOCK_FIRST_BOOT); + } else if (first_boot == 1) { + LOCKD_DBG("first_boot : %d \n", first_boot); + return 0; + } + + lock_type = _lockd_get_lock_type(); + if (lock_type == 1) { + lockd->request_recovery = FALSE; + } + lockd->lock_type = lock_type; + ret = lockd_launch_app_lockscreen(lockd); + return ret; +} diff --git a/mobile/src/lockd-debug.c b/mobile/src/lockd-debug.c new file mode 100644 index 0000000..72c7227 --- /dev/null +++ b/mobile/src/lockd-debug.c @@ -0,0 +1,94 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <stdio.h> +#include <stdarg.h> +#include <fcntl.h> +#include <time.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <glib.h> + +#include "lockd-debug.h" + +#define LINEMAX 256 +#define MAXFILELEN 1048576 +#define LOGFILE "/tmp/starter.log" + +void lockd_log_t(char *fmt, ...) +{ + va_list ap; + FILE *fd = 0; + char buf[LINEMAX] = { 0, }; + char debugString[LINEMAX] = { 0, }; + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + int fileLen = 0; + struct tm local_t; + time_t current_time = 0; + bzero((char *)&debugString, LINEMAX); + time(¤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); + } + } +} diff --git a/mobile/src/lockd-process-mgr.c b/mobile/src/lockd-process-mgr.c new file mode 100644 index 0000000..f9bc863 --- /dev/null +++ b/mobile/src/lockd-process-mgr.c @@ -0,0 +1,176 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <vconf.h> +#include <vconf-keys.h> + +#include <aul.h> + +#include "lockd-debug.h" +#include "lockd-process-mgr.h" +#include "starter-vconf.h" + +#define LOCKD_DEFAULT_PKG_NAME "org.tizen.lockscreen" +#define LOCKD_DEFAULT_LOCKSCREEN "org.tizen.lockscreen" +#define LOCKD_PHONE_LOCK_PKG_NAME "org.tizen.lockscreen" +#define RETRY_MAXCOUNT 30 +#define RELAUNCH_INTERVAL 100*1000 + +static char *_lockd_process_mgr_get_pkgname(void) +{ + char *pkgname = NULL; + + pkgname = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR); + + LOCKD_DBG("pkg name is %s", pkgname); + + if (pkgname == NULL) { + return LOCKD_DEFAULT_PKG_NAME; + } + + return pkgname; +} + +int lockd_process_mgr_restart_lock(int phone_lock_state) +{ + char *lock_app_path = NULL; + int pid; + + lock_app_path = _lockd_process_mgr_get_pkgname(); + pid = aul_launch_app(lock_app_path, NULL); + + LOCKD_DBG("Reset : aul_launch_app(%s, NULL), pid = %d", lock_app_path, + pid); + + return pid; +} + +int lockd_process_mgr_start_lock(void *data, int (*dead_cb) (int, void *), + int phone_lock_state) +{ + char *lock_app_path = NULL; + int pid; + int ret; + + lock_app_path = _lockd_process_mgr_get_pkgname(); + + int i; + for (i=0; i<RETRY_MAXCOUNT; i++) + { + pid = aul_launch_app(lock_app_path, NULL); + + LOCKD_DBG("aul_launch_app(%s), pid = %d", lock_app_path, pid); + + if (pid == AUL_R_ECOMM) { + LOCKD_DBG("Relaunch lock application [%d]times", i); + usleep(RELAUNCH_INTERVAL); + } else if (pid == AUL_R_ERROR) { + LOCKD_DBG("launch[%s] is failed, launch default lock screen", lock_app_path); + ret = vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, LOCKD_DEFAULT_LOCKSCREEN); + if (ret != 0) { + LOCKD_ERR("set failed"); + } + pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, NULL); + if (pid >0) { + return pid; + } + } else { + return pid; + } + } + LOCKD_DBG("Relaunch lock application failed..!!"); + return pid; +} + +int lockd_process_mgr_start_normal_lock(void *data, int (*dead_cb) (int, void *)) +{ + int pid = 0; + + int i; + for (i=0; i<RETRY_MAXCOUNT; i++) + { + pid = aul_launch_app(LOCKD_DEFAULT_PKG_NAME, NULL); + + LOCKD_DBG("aul_launch_app(%s), pid = %d", LOCKD_DEFAULT_PKG_NAME, pid); + + if (pid == AUL_R_ECOMM) { + LOCKD_DBG("Relaunch lock application [%d]times", i); + usleep(RELAUNCH_INTERVAL); + } else if (pid == AUL_R_ERROR) { + LOCKD_DBG("launch[%s] is failed, launch default lock screen", LOCKD_DEFAULT_PKG_NAME); + pid = aul_launch_app(LOCKD_DEFAULT_LOCKSCREEN, NULL); + if (pid >0) { + return pid; + } + } else { + return pid; + } + } + LOCKD_DBG("Relaunch lock application failed..!!"); + return pid; +} + +int lockd_process_mgr_start_phone_lock(void) +{ + int pid = 0; + + pid = aul_launch_app(LOCKD_PHONE_LOCK_PKG_NAME, NULL); + LOCKD_DBG("aul_launch_app(%s, b), pid = %d", LOCKD_PHONE_LOCK_PKG_NAME, + pid); + return pid; +} + +void lockd_process_mgr_terminate_lock_app(int lock_app_pid, int state) +{ + LOCKD_DBG + ("lockd_process_mgr_terminate_lock_app, state:%d\n", + state); + + if (state == 1) { + if (lock_app_pid != 0) { + LOCKD_DBG("Terminate Lock app(pid : %d)", lock_app_pid); + aul_terminate_pid(lock_app_pid); + } + } +} + +void lockd_process_mgr_terminate_phone_lock(int phone_lock_pid) +{ + LOCKD_DBG("Terminate Phone Lock(pid : %d)", phone_lock_pid); + aul_terminate_pid(phone_lock_pid); +} + +int lockd_process_mgr_check_lock(int pid) +{ + char buf[128]; + LOCKD_DBG("%s, %d", __func__, __LINE__); + + if (aul_app_get_pkgname_bypid(pid, buf, sizeof(buf)) < 0) { + LOCKD_DBG("no such pkg by pid %d\n", pid); + } else { + LOCKD_DBG("app pkgname = %s, pid = %d\n", buf, pid); + if (aul_app_is_running(buf) == TRUE) { + LOCKD_DBG("%s [pid = %d] is running\n", buf, pid); + return TRUE; + } else { + LOCKD_DBG("[pid = %d] is exist but %s is not running\n", + pid, buf); + } + } + return FALSE; +} diff --git a/mobile/src/lockd-window-mgr.c b/mobile/src/lockd-window-mgr.c new file mode 100644 index 0000000..4d826e5 --- /dev/null +++ b/mobile/src/lockd-window-mgr.c @@ -0,0 +1,283 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <Elementary.h> +#include <Ecore_X.h> +#include <utilX.h> +#include <ui-gadget.h> +#include <vconf.h> +#include <bundle.h> +#include <appcore-efl.h> +#include <app.h> + +#include "lockd-debug.h" +#include "lockd-window-mgr.h" + +#define PACKAGE "starter" +#define SOS_KEY_COUNT 3 +#define SOS_KEY_INTERVAL 0.5 + +struct _lockw_data { + Evas_Object *main_win; + Evas_Object *main_layout; + + Ecore_X_Window lock_x_window; + + Ecore_Event_Handler *h_keydown; + Ecore_Event_Handler *h_wincreate; + Ecore_Event_Handler *h_winshow; + + Ecore_Timer *pTimerId; + int volume_key_cnt; + + int phone_lock_state; + int phone_lock_app_pid; +}; + +static Eina_Bool _lockd_window_key_down_cb(void *data, int type, void *event) +{ + Ecore_Event_Key *ev = event; + + LOCKD_DBG("Key Down CB : %s", ev->keyname); + + return ECORE_CALLBACK_PASS_ON; +} + +static int +_lockd_window_check_validate_rect(Ecore_X_Display * dpy, Ecore_X_Window window) +{ + Ecore_X_Window root; + Ecore_X_Window child; + + int rel_x = 0; + int rel_y = 0; + int abs_x = 0; + int abs_y = 0; + + unsigned int width = 0; + unsigned int height = 0; + unsigned int border = 0; + unsigned int depth = 0; + + Eina_Bool ret = FALSE; + + root = ecore_x_window_root_first_get(); + + if (XGetGeometry + (dpy, window, &root, &rel_x, &rel_y, &width, &height, &border, + &depth)) { + if (XTranslateCoordinates + (dpy, window, root, 0, 0, &abs_x, &abs_y, &child)) { + if ((abs_x - border) >= 480 || (abs_y - border) >= 800 + || (width + abs_x) <= 0 || (height + abs_y) <= 0) { + ret = FALSE; + } else { + ret = TRUE; + } + } + } + + return ret; +} + +static Window get_user_created_window(Window win) +{ + Atom type_ret = 0; + int ret, size_ret = 0; + unsigned long num_ret = 0, bytes = 0; + unsigned char *prop_ret = NULL; + unsigned int xid; + Atom prop_user_created_win; + + prop_user_created_win = + XInternAtom(ecore_x_display_get(), "_E_USER_CREATED_WINDOW", False); + + ret = + XGetWindowProperty(ecore_x_display_get(), win, + prop_user_created_win, 0L, 1L, False, 0, + &type_ret, &size_ret, &num_ret, &bytes, + &prop_ret); + + if (ret != Success) { + if (prop_ret) + XFree((void *)prop_ret); + return win; + } else if (!prop_ret) { + return win; + } + + memcpy(&xid, prop_ret, sizeof(unsigned int)); + XFree((void *)prop_ret); + + return xid; + +} + +Eina_Bool +lockd_window_set_window_property(lockw_data * data, int lock_app_pid, + void *event) +{ + Ecore_X_Event_Window_Create *e = event; + Ecore_X_Window user_window = 0; + lockw_data *lockw = (lockw_data *) data; + int pid = 0; + + if (!lockw) { + return EINA_FALSE; + } + LOCKD_DBG("%s, %d", __func__, __LINE__); + + user_window = get_user_created_window((Window) (e->win)); + + int ret = ecore_x_netwm_pid_get(user_window, &pid); + if(ret != 1) { + return EINA_FALSE; + } + + LOCKD_DBG("Check PID(%d) window. (lock_app_pid : %d)\n", pid, + lock_app_pid); + + if (lock_app_pid == pid) { + if (_lockd_window_check_validate_rect + (ecore_x_display_get(), user_window) == TRUE) { + lockw->lock_x_window = user_window; + LOCKD_DBG + ("This is lock application. Set window property. win id : %x", + user_window); + + ecore_x_icccm_name_class_set(user_window, "LOCK_SCREEN", + "LOCK_SCREEN"); + ecore_x_netwm_window_type_set(user_window, + ECORE_X_WINDOW_TYPE_NOTIFICATION); + utilx_set_system_notification_level(ecore_x_display_get + (), user_window, + UTILX_NOTIFICATION_LEVEL_NORMAL); + utilx_set_window_opaque_state(ecore_x_display_get(), + user_window, + UTILX_OPAQUE_STATE_ON); + return EINA_TRUE; + } + } + return EINA_FALSE; +} + +Eina_Bool +lockd_window_set_window_effect(lockw_data * data, int lock_app_pid, void *event) +{ + Ecore_X_Event_Window_Create *e = event; + Ecore_X_Window user_window = 0; + int pid = 0; + + user_window = get_user_created_window((Window) (e->win)); + int ret = ecore_x_netwm_pid_get(user_window, &pid); + if(ret != 1) { + return EINA_FALSE; + } + + LOCKD_DBG("%s, %d", __func__, __LINE__); + + LOCKD_DBG("PID(%d) window created. (lock_app_pid : %d)\n", pid, + lock_app_pid); + + if (lock_app_pid == pid) { + if (_lockd_window_check_validate_rect + (ecore_x_display_get(), user_window) == TRUE) { + LOCKD_DBG + ("This is lock application. Disable window effect. win id : %x\n", + user_window); + + utilx_set_window_effect_state(ecore_x_display_get(), + user_window, 0); + return EINA_TRUE; + } + } + return EINA_FALSE; +} + +void lockd_window_set_phonelock_pid(lockw_data * data, int phone_lock_pid) +{ + lockw_data *lockw = (lockw_data *) data; + + if (!lockw) { + return; + } + LOCKD_DBG("%s, %d", __func__, __LINE__); + lockw->phone_lock_app_pid = phone_lock_pid; + LOCKD_DBG("%s, %d, lockw->phone_lock_app_pid = %d", __func__, __LINE__, + lockw->phone_lock_app_pid); +} + +void +lockd_window_mgr_ready_lock(void *data, lockw_data * lockw, + Eina_Bool(*create_cb) (void *, int, void *), + Eina_Bool(*show_cb) (void *, int, void *)) +{ + if (lockw == NULL) { + LOCKD_ERR("lockw is NULL."); + return; + } + lockw->h_wincreate = + ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CREATE, create_cb, + data); + lockw->h_winshow = + ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, show_cb, data); + + lockw->volume_key_cnt = 0; + + lockw->h_keydown = + ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, + _lockd_window_key_down_cb, lockw); +} + +void lockd_window_mgr_finish_lock(lockw_data * lockw) +{ + Ecore_X_Window xwin; + + if (lockw == NULL) { + LOCKD_ERR("lockw is NULL."); + return; + } + if (lockw->h_wincreate != NULL) { + ecore_event_handler_del(lockw->h_wincreate); + lockw->h_wincreate = NULL; + } + if (lockw->h_winshow != NULL) { + ecore_event_handler_del(lockw->h_winshow); + lockw->h_winshow = NULL; + } + + ecore_x_pointer_ungrab(); + + if (lockw->h_keydown != NULL) { + ecore_event_handler_del(lockw->h_keydown); + lockw->h_keydown = NULL; + } +} + +lockw_data *lockd_window_init(void) +{ + lockw_data *lockw = NULL; + long pid; + + lockw = (lockw_data *) malloc(sizeof(lockw_data)); + memset(lockw, 0x0, sizeof(lockw_data)); + + pid = getpid(); + + return lockw; +} diff --git a/mobile/src/menu_daemon.c b/mobile/src/menu_daemon.c new file mode 100644 index 0000000..ebb5237 --- /dev/null +++ b/mobile/src/menu_daemon.c @@ -0,0 +1,373 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <ail.h> +#include <aul.h> +#include <db-util.h> +#include <Elementary.h> +#include <errno.h> +#include <fcntl.h> +#include <pkgmgr-info.h> +#include <stdio.h> +#include <sysman.h> +#include <syspopup_caller.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> +#include <vconf.h> + +#include "hw_key.h" +#include "pkg_event.h" +#include "util.h" +#include "xmonitor.h" + + +int errno; + + +#define QUERY_UPDATE_NAME "UPDATE app_info SET name='%s' where package='%s';" +#define SAT_DESKTOP_FILE "/opt/share/applications/org.tizen.sat-ui.desktop" +#define RELAUNCH_INTERVAL 100*1000 +#define RETRY_MAXCOUNT 30 + +static struct info { + pid_t home_pid; + pid_t volume_pid; + int power_off; +} s_info = { + .home_pid = -1, + .volume_pid = -1, + .power_off = 0, +}; + + + +#define RETRY_COUNT 5 +int menu_daemon_open_app(const char *pkgname) +{ + register int i; + int r = AUL_R_ETIMEOUT; + for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) { + r = aul_open_app(pkgname); + if (0 <= r) return r; + else { + _D("aul_open_app error(%d)", r); + _F("cannot open an app(%s) by %d", pkgname, r); + } + usleep(500000); + } + + return r; +} + + + +int menu_daemon_launch_app(const char *pkgname, bundle *b) +{ + register int i; + int r = AUL_R_ETIMEOUT; + for (i = 0; AUL_R_ETIMEOUT == r && i < RETRY_COUNT; i ++) { + r = aul_launch_app(pkgname, b); + if (0 <= r) return r; + else { + _D("aul_launch_app error(%d)", r); + _F("cannot launch an app(%s) by %d", pkgname, r); + } + usleep(500000); + } + + return r; +} + + + +bool menu_daemon_is_homescreen(pid_t pid) +{ + if (s_info.home_pid == pid) return true; + return false; +} + + + +inline char *menu_daemon_get_selected_pkgname(void) +{ + char *pkgname = NULL; + + pkgname = vconf_get_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME); + retv_if(NULL == pkgname, NULL); + + return pkgname; +} + + + +static bool _exist_package(char *pkgid) +{ + int ret = 0; + pkgmgrinfo_pkginfo_h handle = NULL; + + ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle); + if (PMINFO_R_OK != ret || NULL == handle) { + _D("%s doesn't exist in this binary", pkgid); + return false; + } + + pkgmgrinfo_pkginfo_destroy_pkginfo(handle); + + return true; +} + + + +inline void menu_daemon_open_homescreen(const char *pkgname) +{ + char *homescreen = NULL; + char *tmp = NULL; + + system("echo -e '[${_G}menu-daemon launches home-screen${C_}]' > /dev/kmsg"); + + if (NULL == pkgname) { + tmp = menu_daemon_get_selected_pkgname(); + ret_if(NULL == tmp); + homescreen = tmp; + } else { + homescreen = (char *) pkgname; + } + + syspopup_destroy_all(); + + int ret; + ret = menu_daemon_open_app(homescreen); + _D("can%s launch %s now. (%d)", ret < 0 ? "not" : "", homescreen, ret); + if (ret < 0 && strcmp(homescreen, HOME_SCREEN_PKG_NAME) && _exist_package(HOME_SCREEN_PKG_NAME)) { + _E("cannot launch package %s", homescreen); + + if (0 != vconf_set_str(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME)) { + _E("Cannot set value(%s) into key(%s)", VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, HOME_SCREEN_PKG_NAME); + } + + while (AUL_R_ETIMEOUT == ret) { + _E("Failed to open a default home, %s", HOME_SCREEN_PKG_NAME); + ret = menu_daemon_open_app(HOME_SCREEN_PKG_NAME); + } + } + + if (ret < 0) { + _E("Critical! Starter cannot launch anymore[%d]", ret); + _F("Critical! Starter cannot launch anymore[%d]", ret); + } + + s_info.home_pid = ret; + if (ret > 0) { + if (-1 == sysconf_set_mempolicy_bypid(ret, OOM_IGNORE)) { + _E("Cannot set the memory policy for Home-screen(%d)", ret); + } else { + _D("Set the memory policy for Home-screen(%d)", ret); + } + } + + if (tmp) free(tmp); +} + + + +static void _show_cb(keynode_t* node, void *data) +{ + int seq; + + _D("[MENU_DAEMON] _show_cb is invoked"); + + if (node) { + seq = vconf_keynode_get_int(node); + } else { + if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) { + _E("Failed to get sequence info"); + return; + } + } + + switch (seq) { + case 0: + if (s_info.home_pid > 0) { + int pid; + _D("pid[%d] is terminated.", s_info.home_pid); + pid = s_info.home_pid; + s_info.home_pid = -1; + + if (aul_terminate_pid(pid) != AUL_R_OK) + _E("Failed to terminate %d", s_info.home_pid); + } + break; + case 1: + menu_daemon_open_homescreen(NULL); + break; + default: + _E("False sequence [%d]", seq); + break; + } + + return; +} + + + +static void _pkg_changed(keynode_t* node, void *data) +{ + char *pkgname; + int seq; + + if (vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &seq) < 0) { + _E("Do nothing, there is no sequence info yet"); + return; + } + + if (seq < 1) { + _E("Sequence is not ready yet, do nothing"); + return; + } + + _D("_pkg_changed is invoked"); + + pkgname = menu_daemon_get_selected_pkgname(); + if (!pkgname) + return; + + _D("pkg_name : %s", pkgname); + + if (s_info.home_pid > 0) { + char old_pkgname[256]; + + if (aul_app_get_pkgname_bypid(s_info.home_pid, old_pkgname, sizeof(old_pkgname)) == AUL_R_OK) { + if (!strcmp(pkgname, old_pkgname)) { + _D("Package is changed but same package is selected"); + free(pkgname); + return; + } + } + + if (AUL_R_OK != aul_terminate_pid(s_info.home_pid)) + _D("Failed to terminate pid %d", s_info.home_pid); + } else { + /* If there is no running home */ + menu_daemon_open_homescreen(pkgname); + } + + free(pkgname); + return; +} + + + +static void _launch_volume(void) +{ + int pid; + int i; + _D("_launch_volume"); + + for (i=0; i<RETRY_MAXCOUNT; i++) + { + pid = syspopup_launch("volume", NULL); + + _D("syspopup_launch(volume), pid = %d", pid); + + if (pid <0) { + _D("syspopup_launch(volume)is failed [%d]times", i); + usleep(RELAUNCH_INTERVAL); + } else { + s_info.volume_pid = pid; + return; + } + } +} + +int menu_daemon_check_dead_signal(int pid) +{ + if (s_info.power_off) { + _D("Power off. ignore dead cb\n"); + return 0; + } + + _D("Process %d is termianted", pid); + + if (pid < 0) + return 0; + + if (pid == s_info.home_pid) { + char *pkgname = NULL; + pkgname = menu_daemon_get_selected_pkgname(); + retv_if(NULL == pkgname, 0); + + _D("pkg_name : %s", pkgname); + menu_daemon_open_homescreen(pkgname); + free(pkgname); + } else if (pid == s_info.volume_pid) { + _launch_volume(); + } else { + _D("Unknown process, ignore it (pid %d, home pid %d)", + pid, s_info.home_pid); + } + + + return 0; +} + + + +void menu_daemon_init(void *data) +{ + _D( "[MENU_DAEMON]menu_daemon_init is invoked"); + + aul_launch_init(NULL,NULL); + + create_key_window(); + if (xmonitor_init() < 0) _E("cannot init xmonitor"); + + pkg_event_init(); + _launch_volume(); + + if (unlink(SAT_DESKTOP_FILE) != 0) + _E("cannot remove sat-ui desktop."); + + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed, NULL) < 0) + _E("Failed to add the callback for package change event"); + + if (vconf_notify_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb, NULL) < 0) + _E("Failed to add the callback for show event"); + + _pkg_changed(NULL, NULL); + vconf_set_int(VCONFKEY_IDLE_SCREEN_LAUNCHED, VCONFKEY_IDLE_SCREEN_LAUNCHED_TRUE); +} + + + +void menu_daemon_fini(void) +{ + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SELECTED_PACKAGE_NAME, _pkg_changed) < 0) + _E("Failed to ignore the callback for package change event"); + + if (vconf_ignore_key_changed(VCONFKEY_STARTER_SEQUENCE, _show_cb) < 0) + _E("Failed to ignore the callback for show event"); + + xmonitor_fini(); + pkg_event_fini(); + destroy_key_window(); +} + + + +// End of a file diff --git a/mobile/src/pkg_event.c b/mobile/src/pkg_event.c new file mode 100644 index 0000000..46feba9 --- /dev/null +++ b/mobile/src/pkg_event.c @@ -0,0 +1,301 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <ail.h> +#include <errno.h> +#include <Elementary.h> +#include <Ecore.h> +#include <Ecore_File.h> +#include <stdio.h> +#include <sys/inotify.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <stdbool.h> +#include <unistd.h> +#include <vconf.h> + +#include "pkg_event.h" +#include "util.h" + + +#define CONF_FILE "/usr/share/install-info/desktop.conf" +#define BUFSZE 1024 + + +extern int errno; +struct inotify_path +{ + int wd; + char *path; +}; + +struct desktop_notifier s_desktop_notifier = { + .number = 0, + .ifd = 0, + .handler = NULL, +}; + + + +struct inotify_path paths[CONF_PATH_NUMBER]; + + +static Eina_Bool +directory_notify(void* data, Ecore_Fd_Handler* fd_handler) +{ + char *buf; + ssize_t read_size, len, i = 0; + int fd; + + fd = ecore_main_fd_handler_fd_get(fd_handler); + _D("There are some modification, ifd [%d]", fd); + if(fd < 0) { + _E("Failed to get fd"); + return ECORE_CALLBACK_CANCEL; + } + + if (ioctl(fd, FIONREAD, &read_size) < 0) { + _E("Failed to get q size"); + return ECORE_CALLBACK_CANCEL; + } + + if (read_size <= 0) { + _E("Buffer is not ready!!!"); + return ECORE_CALLBACK_RENEW; + } + + buf = malloc(read_size); + if (!buf) { + _E("Failed to allocate heap for event handling"); + return ECORE_CALLBACK_RENEW; + } + + len = read(fd, buf, read_size); + if (len < 0) { + free(buf); + return ECORE_CALLBACK_CANCEL; + } + buf[read_size - 1] = '\0'; + + while (i < len) { + struct inotify_event* event = (struct inotify_event*) &buf[i]; + char *str_potksed = "potksed."; + char *package = NULL; + ssize_t idx; + int nev_name; + + nev_name = strlen(event->name) - 1; + for (idx = 0; nev_name >= 0 && str_potksed[idx]; idx++) { + if (event->name[nev_name] != str_potksed[idx]) { + break; + } + nev_name --; + } + + if (str_potksed[idx] != '\0' || nev_name < 0) { + _D("This is not a desktop file : %s", event->name); + i += sizeof(struct inotify_event) + event->len; + continue; + } + + package = strdup(event->name); + break_if(NULL == package); + + package[nev_name + 1] = '\0'; + _D("Package : %s", package); + + if (event->mask & IN_CLOSE_WRITE || event->mask & IN_MOVED_TO) { + ail_appinfo_h ai = NULL; + ail_error_e ret; + + ret = ail_get_appinfo(package, &ai); + if (AIL_ERROR_OK == ret || AIL_ERROR_NO_DATA == ret) { + if (ai) ail_destroy_appinfo(ai); + + if (AIL_ERROR_NO_DATA == ret) { + if (ail_desktop_add(package) < 0) { + _D("Failed to add a new package (%s)", event->name); + } + } else if (AIL_ERROR_OK == ret) { + if (ail_desktop_update(package) < 0) { + _D("Failed to add a new package (%s)", event->name); + } + } + } else { + _E("Failed to get appinfo"); + } + } else if (event->mask & IN_DELETE) { + if (ail_desktop_remove(package) < 0) + _D("Failed to remove a package (%s)", event->name); + } else { + _D("this event is not dealt with inotify"); + } + + free(package); + + i += sizeof(struct inotify_event) + event->len; + } + + free(buf); + return ECORE_CALLBACK_RENEW; +} + + + +static inline char *_ltrim(char *str) +{ + retv_if(NULL == str, NULL); + while (*str && (*str == ' ' || *str == '\t' || *str == '\n')) str ++; + return str; +} + + + +static inline int _rtrim(char *str) +{ + int len; + + retv_if(NULL == str, 0); + + len = strlen(str); + while (--len >= 0 && (str[len] == ' ' || str[len] == '\n' || str[len] == '\t')) { + str[len] = '\0'; + } + + return len; +} + + + +static int _retrieve_conf_path(struct inotify_path* paths) +{ + char *line = NULL; + FILE *fp; + size_t size = 0; + ssize_t read; + int i = 0; + + fp = fopen(CONF_FILE, "r"); + if (NULL == fp) { + _E(CONF_FILE); + return -1; + } + + while ((read = getline(&line, &size, fp)) != -1 && i < CONF_PATH_NUMBER - 1) { + char *begin; + + if (size <= 0) break; + + begin = _ltrim(line); + _rtrim(line); + + if (*begin == '#' || *begin == '\0') continue; + + paths[i].path = strdup(begin); + i++; + } + + if (line) free(line); + paths[i].path = NULL; + fclose(fp); + + return i; +} + + + +static void _unretrieve_conf_path(struct inotify_path* paths, int number) +{ + register int i; + + for (i = 0; i < number; i ++) { + if (paths[i].path) { + free(paths[i].path); + paths[i].path = NULL; + } + } +} + + + +void pkg_event_init() +{ + int wd = 0; + int i; + + s_desktop_notifier.ifd = inotify_init(); + if (s_desktop_notifier.ifd == -1) { + _E("inotify_init error: %s", strerror(errno)); + return; + } + + s_desktop_notifier.number = _retrieve_conf_path(paths); + + for (i = 0; i < CONF_PATH_NUMBER && paths[i].path; i++) + { + _D("Configuration file for desktop file monitoring [%s] is added", paths[i].path); + if (access(paths[i].path, R_OK) != 0) + { + ecore_file_mkpath(paths[i].path); + if (chmod(paths[i].path, 0777) == -1) { + _E("cannot chmod %s", paths[i].path); + } + } + + wd = inotify_add_watch(s_desktop_notifier.ifd, paths[i].path, IN_CLOSE_WRITE | IN_MOVED_TO | IN_DELETE); + if (wd == -1) { + _E("inotify_add_watch error: %s", strerror(errno)); + close(s_desktop_notifier.ifd); + return; + } + + paths[i].wd = wd; + } + + s_desktop_notifier.handler = ecore_main_fd_handler_add(s_desktop_notifier.ifd, ECORE_FD_READ, directory_notify, NULL, NULL, NULL); + if (!s_desktop_notifier.handler) { + _E("cannot add handler for inotify"); + } +} + + + +void pkg_event_fini(void) +{ + register int i; + + if (s_desktop_notifier.handler) { + ecore_main_fd_handler_del(s_desktop_notifier.handler); + } + + for (i = 0; i < CONF_PATH_NUMBER; i ++) { + if (paths[i].wd) { + if (inotify_rm_watch(s_desktop_notifier.ifd, paths[i].wd) < 0) { + _E("Error: %s", strerror(errno)); + } + paths[i].wd = 0; + } + } + + _unretrieve_conf_path(paths, s_desktop_notifier.number); + + if (s_desktop_notifier.ifd) { + close(s_desktop_notifier.ifd); + s_desktop_notifier.ifd = 0; + } +} diff --git a/mobile/src/starter.c b/mobile/src/starter.c new file mode 100644 index 0000000..d96c444 --- /dev/null +++ b/mobile/src/starter.c @@ -0,0 +1,273 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <Elementary.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <string.h> +#include <poll.h> +#include <systemd/sd-daemon.h> + +#include <aul.h> +#include <vconf.h> +#include <heynoti.h> +#include <signal.h> +#include <system_info.h> + +#include "starter.h" +#include "starter-util.h" +#include "x11.h" +#include "lock-daemon.h" +#include "lockd-debug.h" +#include "menu_daemon.h" + +#ifndef PACKAGE_NAME +#define PACKAGE_NAME "org.tizen.starter" +#endif + +#define DEFAULT_THEME "tizen" +#define PWLOCK_PATH "/usr/apps/org.tizen.pwlock/bin/pwlock" +#define PWLOCK_PKG_NAME "org.tizen.pwlock" +#define QP_EMUL_STR "Emulator" + +static void lock_menu_screen(void) +{ + vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 0); +} + +static void unlock_menu_screen(void) +{ + int r; + int show_menu; + + show_menu = 0; + r = vconf_get_int(VCONFKEY_STARTER_SEQUENCE, &show_menu); + if (r || !show_menu) { + vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1); + } +} + +static void _set_elm_theme(void) +{ + char *vstr; + char *theme; + Elm_Theme *th = NULL; + vstr = vconf_get_str(VCONFKEY_SETAPPL_WIDGET_THEME_STR); + if (vstr == NULL) + theme = DEFAULT_THEME; + else + theme = vstr; + + th = elm_theme_new(); + _DBG("theme vconf[%s]\n set[%s]\n", vstr, theme); + elm_theme_set(th, theme); + + if (vstr) + free(vstr); +} + +static int _check_emul() +{ + int is_emul = 0; + char *info = NULL; + + if (system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &info) == 0) { + if (info == NULL) return 0; + if (!strncmp(QP_EMUL_STR, info, strlen(info))) { + is_emul = 1; + } + } + + if (info != NULL) free(info); + + return is_emul; +} + +static int _launch_pwlock(void) +{ + int r; + + _DBG("%s", __func__); + + if(_check_emul()) { + _DBG("Emulator => skip pwlock"); + vconf_set_int(VCONFKEY_STARTER_SEQUENCE, 1); + return 0; + } + + r = aul_launch_app(PWLOCK_PKG_NAME, NULL); + if (r < 0) { + _ERR("PWLock launch error: error(%d)", r); + if (r == AUL_R_ETIMEOUT) { + _DBG("Launch pwlock is failed for AUL_R_ETIMEOUT, again launch pwlock"); + r = aul_launch_app(PWLOCK_PKG_NAME, NULL); + if (r < 0) { + _ERR("2'nd PWLock launch error: error(%d)", r); + return -1; + } else { + _DBG("Launch pwlock"); + return 0; + } + } else { + return -1; + } + } else { + _DBG("Launch pwlock"); + return 0; + } +} + +static void _signal_handler(int signum, siginfo_t *info, void *unused) +{ + _DBG("_signal_handler : Terminated..."); + elm_exit(); +} + +static void _heynoti_event_power_off(void *data) +{ + _DBG("_heynoti_event_power_off : Terminated..."); + elm_exit(); +} + +static Eina_Bool _init_idle(void *data) +{ + _DBG("%s %d\n", __func__, __LINE__); + if (_launch_pwlock() < 0) { + _ERR("launch pwlock error"); + } + menu_daemon_init(NULL); + + return ECORE_CALLBACK_CANCEL; +} + +static void _lock_state_cb(keynode_t * node, void *data) +{ + _DBG("%s %d\n", __func__, __LINE__); + WRITE_FILE_LOG("%s", "Lock state is changed!"); + + if (_launch_pwlock() < 0) { + _ERR("launch pwlock error"); + } + menu_daemon_init(NULL); + if (vconf_ignore_key_changed(VCONFKEY_IDLE_LOCK_STATE, + _lock_state_cb) != 0) { + LOCKD_DBG("Fail to unregister"); + } +} + +static void _init(struct appdata *ad) +{ + int r; + struct sigaction act; + + memset(&act,0x00,sizeof(struct sigaction)); + act.sa_sigaction = _signal_handler; + act.sa_flags = SA_SIGINFO; + + int ret = sigemptyset(&act.sa_mask); + if (ret < 0) { + _ERR("Failed to sigemptyset[%s]", strerror(errno)); + } + ret = sigaddset(&act.sa_mask, SIGTERM); + if (ret < 0) { + _ERR("Failed to sigaddset[%s]", strerror(errno)); + } + ret = sigaction(SIGTERM, &act, NULL); + if (ret < 0) { + _ERR("Failed to sigaction[%s]", strerror(errno)); + } + + memset(ad, 0, sizeof(struct appdata)); + + gettimeofday(&ad->tv_start, NULL); + + lock_menu_screen(); + _set_elm_theme(); + + _DBG("%s %d\n", __func__, __LINE__); + + r = start_lock_daemon(TRUE); + if (r == 1) { + if (vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE, + _lock_state_cb, NULL) != 0) { + _ERR("[Error] vconf notify : lock state"); + ecore_timer_add(1.5, _init_idle, NULL); + } + } else { + if (_launch_pwlock() < 0) { + _ERR("launch pwlock error"); + } + menu_daemon_init(NULL); + } +} + +static void _fini(struct appdata *ad) +{ + struct timeval tv, res; + + if (ad == NULL) { + fprintf(stderr, "Invalid argument: appdata is NULL\n"); + return; + } + + unlock_menu_screen(); + menu_daemon_fini(); + + gettimeofday(&tv, NULL); + timersub(&tv, &ad->tv_start, &res); + _DBG("Total time: %d.%06d sec\n", (int)res.tv_sec, (int)res.tv_usec); +} + +int main(int argc, char *argv[]) +{ + struct appdata ad; + + WRITE_FILE_LOG("%s", "Main function is started in starter"); + + int heyfd = heynoti_init(); + if (heyfd < 0) { + _ERR("Failed to heynoti_init[%d]", heyfd); + return -1; + } + + int ret = heynoti_subscribe(heyfd, "power_off_start", _heynoti_event_power_off, NULL); + if (ret < 0) { + _ERR("Failed to heynoti_subscribe[%d]", ret); + } + ret = heynoti_attach_handler(heyfd); + if (ret < 0) { + _ERR("Failed to heynoti_attach_handler[%d]", ret); + } + + elm_init(argc, argv); + + _init(&ad); + + sd_notify(0, "READY=1"); + elm_run(); + + _fini(&ad); + + elm_shutdown(); + + return 0; +} diff --git a/mobile/src/x11.c b/mobile/src/x11.c new file mode 100644 index 0000000..df41f28 --- /dev/null +++ b/mobile/src/x11.c @@ -0,0 +1,111 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#include <X11/Xlib.h> +#include <X11/Xatom.h> +#include <X11/Xutil.h> + +#define DEFAULT_WINDOW_H 1280 + +void prop_string_set(const char *name, const char *value) +{ + Display *d; + Atom a_name; + Atom a_UTF8; + XTextProperty xtp; + + if (name == NULL || value == NULL || value[0] == '\0') + return; + + d = XOpenDisplay(NULL); + if (d == NULL) + return; + + a_name = XInternAtom(d, name, False); + if (a_name == None) + goto exit; + + a_UTF8 = XInternAtom(d, "UTF8_STRING", False); + if (a_UTF8 == None) + goto exit; + + xtp.value = (unsigned char *)value; + xtp.format = 8; + xtp.encoding = a_UTF8; + xtp.nitems = strlen(value); + + XSetTextProperty(d, DefaultRootWindow(d), &xtp, a_name); + + exit: + XCloseDisplay(d); +} + +void prop_int_set(const char *name, unsigned int val) +{ + Display *d; + Atom a_name; + + if (name == NULL) + return; + + d = XOpenDisplay(NULL); + if (d == NULL) + return; + + a_name = XInternAtom(d, name, False); + if (a_name == None) + goto exit; + + XChangeProperty(d, DefaultRootWindow(d), a_name, XA_CARDINAL, 32, + PropModeReplace, (unsigned char *)&val, 1); + + exit: + XCloseDisplay(d); +} + +void set_window_scale(void) +{ + double root_width = 0.0, root_height = 0.0; + char buf[128] = { 0, }; + Display *disp; + int screen_num; + + disp = XOpenDisplay(NULL); + if (disp == NULL) + return; + + screen_num = DefaultScreen(disp); + + root_width = DisplayWidth(disp, screen_num); + root_height = DisplayHeight(disp, screen_num); + + XCloseDisplay(disp); + + snprintf(buf, sizeof(buf), "%lf", root_height / DEFAULT_WINDOW_H); + + if (root_width == 800 && root_height == 1280) { + snprintf(buf, sizeof(buf), "0.71"); + } + + setenv("ELM_SCALE", buf, 1); + setenv("SCALE_FACTOR", buf, 1); +} diff --git a/mobile/src/xmonitor.c b/mobile/src/xmonitor.c new file mode 100644 index 0000000..4c87285 --- /dev/null +++ b/mobile/src/xmonitor.c @@ -0,0 +1,296 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <ail.h> +#include <aul.h> +#include <dlog.h> +#include <Ecore.h> +#include <Ecore_X.h> +#include <Evas.h> +#include <errno.h> +#include <stdbool.h> +#include <stdio.h> +#include <sys/shm.h> +#include <vconf.h> + +#include "menu_daemon.h" +#include "util.h" +#include "starter-util.h" +#include "xmonitor.h" + + + +static struct info { + Ecore_Event_Handler *create_handler; + Ecore_Event_Handler *destroy_handler; + Ecore_Event_Handler *focus_in_handler; + Ecore_Event_Handler *focus_out_handler; + int is_top; +} xmonitor_info = { + .create_handler = NULL, + .destroy_handler = NULL, + .focus_in_handler = NULL, + .focus_out_handler = NULL, + .is_top = VCONFKEY_IDLE_SCREEN_TOP_FALSE, +}; + + + +int errno; + + + +static inline int _get_pid(Ecore_X_Window win) +{ + int pid; + Ecore_X_Atom atom; + unsigned char *in_pid = NULL; + int num; + + atom = ecore_x_atom_get("X_CLIENT_PID"); + if (ecore_x_window_prop_property_get(win, atom, ECORE_X_ATOM_CARDINAL, + sizeof(int), &in_pid, &num) == EINA_FALSE) { + if(in_pid != NULL) { + free(in_pid); + in_pid = NULL; + } + if (ecore_x_netwm_pid_get(win, &pid) == EINA_FALSE) { + _E("Failed to get PID from a window 0x%X", win); + return -EINVAL; + } + } else { + pid = *(int *)in_pid; + free(in_pid); + } + + return pid; +} + + + +bool _set_idlescreen_top(void) +{ + Ecore_X_Window win; + + int is_top; + int ret; + int focused_pid; + + win = ecore_x_window_focus_get(); + focused_pid = _get_pid(win); + retv_if(focused_pid <= 0, false); + + is_top = menu_daemon_is_homescreen(focused_pid)? + VCONFKEY_IDLE_SCREEN_TOP_TRUE : VCONFKEY_IDLE_SCREEN_TOP_FALSE; + + if (is_top != xmonitor_info.is_top) { + ret = vconf_set_int(VCONFKEY_IDLE_SCREEN_TOP, is_top); + retv_if(0 != ret, false); + xmonitor_info.is_top = is_top; + _D("set the key of idlescreen_is_top as %d", is_top); + } + + return true; +} + + + +static Eina_Bool _create_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Create *info = event; + + _D("Create a window[%x]", info->win); + + ecore_x_window_client_sniff(info->win); + + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _destroy_cb(void *data, int type, void *event) +{ + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _focus_in_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Focus_In *info = event; + + _D("Focus in a window[%x]", info->win); + + retv_if(false == _set_idlescreen_top(), ECORE_CALLBACK_PASS_ON); + + return ECORE_CALLBACK_PASS_ON; +} + + + +static Eina_Bool _focus_out_cb(void *data, int type, void *event) +{ + Ecore_X_Event_Window_Focus_Out *info = event; + + _D("Focus out a window[%x]", info->win); + + return ECORE_CALLBACK_PASS_ON; +} + + + +static inline void _sniff_all_windows(void) +{ + Ecore_X_Window root; + Ecore_X_Window ret; + struct stack_item *new_item; + struct stack_item *item; + Eina_List *win_stack = NULL; + struct stack_item { + Ecore_X_Window *wins; + int nr_of_wins; + int i; + }; + + root = ecore_x_window_root_first_get(); + ecore_x_window_sniff(root); + + new_item = malloc(sizeof(*new_item)); + if (!new_item) { + _E("Error(%s)\n", strerror(errno)); + return; + } + + new_item->nr_of_wins = 0; + new_item->wins = + ecore_x_window_children_get(root, &new_item->nr_of_wins); + new_item->i = 0; + + if (new_item->wins) + win_stack = eina_list_append(win_stack, new_item); + else + free(new_item); + + while ((item = eina_list_nth(win_stack, 0))) { + win_stack = eina_list_remove(win_stack, item); + + if (!item->wins) { + free(item); + continue; + } + + while (item->i < item->nr_of_wins) { + ret = item->wins[item->i]; + + ecore_x_window_client_sniff(ret); + + new_item = malloc(sizeof(*new_item)); + if (!new_item) { + _E("Error %s\n", strerror(errno)); + item->i++; + continue; + } + + new_item->i = 0; + new_item->nr_of_wins = 0; + new_item->wins = + ecore_x_window_children_get(ret, + &new_item->nr_of_wins); + if (new_item->wins) { + win_stack = + eina_list_append(win_stack, new_item); + } else { + free(new_item); + } + + item->i++; + } + + free(item->wins); + free(item); + } + + return; +} + + + +int xmonitor_init(void) +{ + if (ecore_x_composite_query() == EINA_FALSE) + _D("====> COMPOSITOR IS NOT ENABLED"); + + xmonitor_info.create_handler = + ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CREATE, _create_cb, NULL); + goto_if(NULL == xmonitor_info.create_handler, Error); + + xmonitor_info.destroy_handler = + ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DESTROY, _destroy_cb, NULL); + goto_if(NULL == xmonitor_info.destroy_handler, Error); + + xmonitor_info.focus_in_handler = + ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _focus_in_cb, NULL); + goto_if(NULL == xmonitor_info.focus_in_handler, Error); + + xmonitor_info.focus_out_handler = + ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _focus_out_cb, NULL); + goto_if(NULL == xmonitor_info.focus_out_handler, Error); + + _sniff_all_windows(); + if (false == _set_idlescreen_top()) _E("cannot set idlescreen_is_top"); + + return 0; + +Error: + if (xmonitor_info.create_handler) { + ecore_event_handler_del(xmonitor_info.create_handler); + xmonitor_info.create_handler = NULL; + } else return -EFAULT; + + if (xmonitor_info.destroy_handler) { + ecore_event_handler_del(xmonitor_info.destroy_handler); + xmonitor_info.destroy_handler = NULL; + } else return -EFAULT; + + if (xmonitor_info.focus_in_handler) { + ecore_event_handler_del(xmonitor_info.focus_in_handler); + xmonitor_info.focus_in_handler = NULL; + } else return -EFAULT; + + if (xmonitor_info.focus_out_handler) { + ecore_event_handler_del(xmonitor_info.focus_out_handler); + xmonitor_info.focus_out_handler = NULL; + } else return -EFAULT; + + return -EFAULT; +} + +void xmonitor_fini(void) +{ + ecore_event_handler_del(xmonitor_info.create_handler); + xmonitor_info.create_handler = NULL; + + ecore_event_handler_del(xmonitor_info.destroy_handler); + xmonitor_info.destroy_handler = NULL; + + ecore_event_handler_del(xmonitor_info.focus_in_handler); + xmonitor_info.focus_in_handler = NULL; + + ecore_event_handler_del(xmonitor_info.focus_out_handler); + xmonitor_info.focus_out_handler = NULL; +} diff --git a/mobile/starter.desktop.in b/mobile/starter.desktop.in new file mode 100644 index 0000000..f2a89f3 --- /dev/null +++ b/mobile/starter.desktop.in @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=@PROJECT_NAME@ +Exec=@BINDIR@/@PROJECT_NAME@ +Icon=elementary +Terminal=false +Type=Application +Categories=Application;Utility; + diff --git a/mobile/starter.manifest b/mobile/starter.manifest new file mode 100644 index 0000000..c12fb88 --- /dev/null +++ b/mobile/starter.manifest @@ -0,0 +1,17 @@ +<manifest> + <define> + <domain name="starter"/> + </define> + <request> + <domain name="starter"/> + </request> + <assign> + <filesystem path="/usr/bin/starter" label="starter" exec_label="starter" /> + <filesystem path="/usr/lib/systemd/user/starter.path" label="_" exec_label="none" /> + <filesystem path="/usr/lib/systemd/user/starter.service" label="_" exec_label="none" /> + <filesystem path="/usr/lib/systemd/user/starter.socket" label="_" exec_label="none" /> + <filesystem path="/usr/lib/systemd/user/core-efl.target.wants/starter.path" label="_" exec_label="none" /> + <filesystem path="/usr/lib/systemd/user/core-efl.target.wants/starter.service" label="_" exec_label="none" /> + <filesystem path="/usr/lib/systemd/user/sockets.target.wants/starter.socket" label="_" exec_label="none" /> + </assign> +</manifest> diff --git a/mobile/starter.rule b/mobile/starter.rule new file mode 100644 index 0000000..5530241 --- /dev/null +++ b/mobile/starter.rule @@ -0,0 +1,10 @@ +starter mobileprint x +starter svi-data rx +starter tts-server x +starter system::homedir rx +starter system::use_internet r +starter isf rx +starter system::vconf rwx +starter _ w +starter org.tizen.clock rwx +starter syspopup::db rw diff --git a/mobile/systemd/starter.path b/mobile/systemd/starter.path new file mode 100644 index 0000000..724239c --- /dev/null +++ b/mobile/systemd/starter.path @@ -0,0 +1,5 @@ +[Unit] +Description=Path activation for the "starter" programme + +[Path] +PathExists=/tmp/amd_ready diff --git a/mobile/systemd/starter.service b/mobile/systemd/starter.service new file mode 100644 index 0000000..63d0e3f --- /dev/null +++ b/mobile/systemd/starter.service @@ -0,0 +1,12 @@ +[Unit] +Description=Start the "starter" program +Before=core-efl.target +After=boot-animation.service + +[Service] +ExecStart=/usr/bin/starter +Restart=always +RestartSec=3 + +[Install] +WantedBy=core-efl.target diff --git a/mobile/systemd/starter.socket b/mobile/systemd/starter.socket new file mode 100644 index 0000000..871d9d3 --- /dev/null +++ b/mobile/systemd/starter.socket @@ -0,0 +1,6 @@ +[Socket] +ListenStream=/tmp/phlock +SocketMode=0777 + +[Install] +WantedBy=sockets.target diff --git a/mobile/test/get_entry.c b/mobile/test/get_entry.c new file mode 100755 index 0000000..ea35358 --- /dev/null +++ b/mobile/test/get_entry.c @@ -0,0 +1,89 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <stdio.h> +#include <X11/Xlib.h> +#include <X11/Xatom.h> +#include <X11/Xutil.h> + +int main(int argc, char *argv[]) +{ + unsigned char *prop_ret; + Atom type_ret; + unsigned long bytes_after, num_ret; + int format_ret; + unsigned int i; + int num; + + Display *d; + Atom a_ac; + Atom a_ap; + Status r; + + d = XOpenDisplay(NULL); + if (d == NULL) { + printf("Display open error\n"); + return 1; + } + + a_ac = XInternAtom(d, "ENLIGHTENMENT_AUTOCAPITAL_ALLOW", False); + if (a_ac == None) { + printf("XInternAtom error\n"); + goto exit; + } + + r = XGetWindowProperty(d, DefaultRootWindow(d), a_ac, 0, 0x7fffffff, + False, XA_CARDINAL, &type_ret, &format_ret, + &num_ret, &bytes_after, &prop_ret); + if (r != Success) { + printf("XGetWindowProperty error\n"); + goto exit; + } + + if (type_ret == XA_CARDINAL && format_ret == 32 && num_ret > 0 + && prop_ret) { + printf("Auto capital: %lu\n", ((unsigned long *)prop_ret)[0]); + } + if (prop_ret) + XFree(prop_ret); + + a_ap = XInternAtom(d, "ENLIGHTENMENT_AUTOPERIOD_ALLOW", False); + if (a_ap == None) { + printf("XInternAtom error\n"); + goto exit; + } + + r = XGetWindowProperty(d, DefaultRootWindow(d), a_ap, 0, 0x7fffffff, + False, XA_CARDINAL, &type_ret, &format_ret, + &num_ret, &bytes_after, &prop_ret); + if (r != Success) { + printf("XGetWindowProperty error\n"); + goto exit; + } + + if (type_ret == XA_CARDINAL && format_ret == 32 && num_ret > 0 + && prop_ret) { + printf("Auto period: %lu\n", ((unsigned long *)prop_ret)[0]); + } + if (prop_ret) + XFree(prop_ret); + + exit: + XCloseDisplay(d); + return 0; +} diff --git a/mobile/test/get_theme.c b/mobile/test/get_theme.c new file mode 100755 index 0000000..2439ed5 --- /dev/null +++ b/mobile/test/get_theme.c @@ -0,0 +1,56 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <stdio.h> +#include <X11/Xlib.h> +#include <X11/Xatom.h> +#include <X11/Xutil.h> + +int main(int argc, char *argv[]) +{ + XTextProperty xtp; + Display *d; + Atom a_e17; + Status r; + + d = XOpenDisplay(NULL); + if (d == NULL) { + printf("Display open error\n"); + return 1; + } + + a_e17 = XInternAtom(d, "ENLIGHTENMENT_THEME", False); + if (a_e17 == None) { + printf("XInternAtom error\n"); + goto exit; + } + + r = XGetTextProperty(d, DefaultRootWindow(d), &xtp, a_e17); + if (!r) { + printf("XGetTextProperty error\n"); + goto exit; + } + + printf("THEME: [%s]\n", (char *)xtp.value); + + XFree(xtp.value); + + exit: + XCloseDisplay(d); + return 0; +} diff --git a/mobile/test/set_theme.c b/mobile/test/set_theme.c new file mode 100755 index 0000000..a6cf4eb --- /dev/null +++ b/mobile/test/set_theme.c @@ -0,0 +1,62 @@ + /* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include <string.h> + +#include <X11/Xlib.h> +#include <X11/Xatom.h> +#include <X11/Xutil.h> + +void set_elm_theme(void) +{ + char *theme; + Display *d; + Atom a_e17; + Atom a_UTF8; + XTextProperty xtp; + + theme = "beat:kessler"; + + d = XOpenDisplay(NULL); + if (d == NULL) + return; + + a_e17 = XInternAtom(d, "ENLIGHTENMENT_THEME", False); + if (a_e17 == None) + goto exit; + + a_UTF8 = XInternAtom(d, "UTF8_STRING", False); + if (a_UTF8 == None) + goto exit; + + xtp.value = (unsigned char *)theme; + xtp.format = 8; + xtp.encoding = a_UTF8; + xtp.nitems = strlen(theme); + + XSetTextProperty(d, DefaultRootWindow(d), &xtp, a_e17); + + exit: + XCloseDisplay(d); +} + +int main(int argc, char *argv[]) +{ + set_elm_theme(); + return 0; +} |