--- /dev/null
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(INSTALLER_PKG_NAME org.tizen.installer)
+SET(INSTALLER_APP_NAME Installer)
+SET(INSTALLER_SERVICE installer_service)
+
+
+
+SET(SRCS
+ src/installer.c
+ src/installer_package_manager.c
+ src/installer_util.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include/)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+ utilX
+ bundle
+ elementary
+ evas
+ ecore-x
+ ecore
+ ecore-input
+ capi-appfw-application
+ dlog
+ pkgmgr-info
+ capi-appfw-package-manager
+ capi-security-privilege-manager
+
+ capi-appfw-service-application
+
+ pkgmgr
+ notification
+ appsvc
+ efl-assist
+)
+
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag} -fpie")
+ENDFOREACH(flag)
+
+
+#CFLAGS
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -g -Wall -Werror=implicit-function-declaration")
+
+ADD_EXECUTABLE(${INSTALLER_PKG_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${INSTALLER_PKG_NAME} ${pkgs_LDFLAGS} "-pie")
+
+ADD_CUSTOM_TARGET(${INSTALLER_PKG_NAME}.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images
+ ${CMAKE_CURRENT_SOURCE_DIR}/${INSTALLER_PKG_NAME}.edc ${CMAKE_CURRENT_BINARY_DIR}/${INSTALLER_PKG_NAME}.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${INSTALLER_PKG_NAME}.edc
+)
+
+ADD_DEPENDENCIES(${INSTALLER_PKG_NAME} ${INSTALLER_PKG_NAME}.edj)
+
+INSTALL(TARGETS ${INSTALLER_PKG_NAME} DESTINATION /usr/apps/${INSTALLER_PKG_NAME}/bin)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${INSTALLER_PKG_NAME}.edj DESTINATION /usr/apps/${INSTALLER_PKG_NAME}/res)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/tizen-manifest.xml DESTINATION /usr/apps/${INSTALLER_PKG_NAME})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/${INSTALLER_PKG_NAME}.png DESTINATION /usr/apps/${INSTALLER_PKG_NAME}/shared/res)
+
+# install smack rule
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${INSTALLER_PKG_NAME}.efl DESTINATION /etc/smack/accesses.d)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${INSTALLER_PKG_NAME}.xml DESTINATION /usr/share/packages)
+
+
+ADD_SUBDIRECTORY(${INSTALLER_SERVICE})
+ADD_SUBDIRECTORY(po)
--- /dev/null
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
--- /dev/null
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Apache License, Version 2.
+Please, see the LICENSE.APLv2 file for Apache License, Version 2 terms and conditions.
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#if !defined(PACKAGE)
+#define PACKAGE "org.tizen.installer"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct package_info_s *package_info_h;
+
+#define EDJ_FILE "/usr/apps/org.tizen.installer/res/org.tizen.installer.edj"
+#define ICON_PATH "/usr/apps/org.tizen.installer/shared/res/org.tizen.installer.png"
+#define GRP_MAIN "main"
+
+#define _(s) dgettext(PACKAGE, s)
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null
+#ifndef __INSTALLER_MANAGER_H_
+#define __INSTALLER_MANAGER_H_
+
+#include <package-manager-types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+bool is_package_installed(const char *pkgid);
+int get_package_version(const char *pkgid, char **version);
+int launch_install_service(const char *pkg_path, const package_manager_pkg_detail_info_t *pkg_info);
+package_manager_pkg_detail_info_t* get_package_info_from_file(const char *file_path);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //__INSTALLER_MANAGER_H_
--- /dev/null
+#undef LOG_TAG
+#define LOG_TAG "INSTALLER"
+
+#ifndef _INSTALLER_UTIL_H_
+#define _INSTALLER_UTIL_H_
+
+#define gettext_noop(str) (str) /* keyword for xgettext to extract translatable strings */
+#define N_(str) gettext_noop(str) /* gettext_noop alias */
+
+#include <dlog.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static const int VERSION_ERROR = -1;
+static const int VERSION_OLD = 0;
+static const int VERSION_SAME = 1;
+static const int VERSION_NEW = 2;
+
+
+char * get_file_extension(const char *file_path);
+char * modify_file_path(const char *file_path);
+int is_valid_version(const char* version);
+int extract_version(const char* version, int* major, int* minor, int* macro);
+int compare_version(const char* old_version, const char* new_version);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //_INSTALLER_UTIL_H_
--- /dev/null
+<manifest>
+ <define>
+ <domain name="installer-service" />
+ <permit>
+ <smack permit="org.tizen.app-tray" type="rwx" />
+ <smack permit="e17" type="rwx" />
+ </permit>
+ </define>
+</manifest>
--- /dev/null
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+SET(INSTALLER_SERVICE installer-service)
+
+SET(SRCS
+ src/installer-service.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}
+${CMAKE_CURRENT_SOURCE_DIR}/include/
+)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+ capi-appfw-service-application
+ notification
+ pkgmgr
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag} -fpie")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+
+ADD_EXECUTABLE(${INSTALLER_SERVICE} ${SRCS})
+TARGET_LINK_LIBRARIES(${INSTALLER_SERVICE} ${pkgs_LDFLAGS} "-pie")
+
+INSTALL(TARGETS ${INSTALLER_SERVICE} DESTINATION /usr/apps/${INSTALLER_PKG_NAME}/bin)
+
+#INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${INSTALLER_SERVICE}.xml DESTINATION /opt/share/packages)
+#INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${INSTALLER_SERVICE}.rule DESTINATION /etc/smack/accesses2.d)
--- /dev/null
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.\r
+\r
+ Apache License\r
+ Version 2.0, January 2004\r
+ http://www.apache.org/licenses/\r
+\r
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r
+\r
+ 1. Definitions.\r
+\r
+ "License" shall mean the terms and conditions for use, reproduction,\r
+ and distribution as defined by Sections 1 through 9 of this document.\r
+\r
+ "Licensor" shall mean the copyright owner or entity authorized by\r
+ the copyright owner that is granting the License.\r
+\r
+ "Legal Entity" shall mean the union of the acting entity and all\r
+ other entities that control, are controlled by, or are under common\r
+ control with that entity. For the purposes of this definition,\r
+ "control" means (i) the power, direct or indirect, to cause the\r
+ direction or management of such entity, whether by contract or\r
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the\r
+ outstanding shares, or (iii) beneficial ownership of such entity.\r
+\r
+ "You" (or "Your") shall mean an individual or Legal Entity\r
+ exercising permissions granted by this License.\r
+\r
+ "Source" form shall mean the preferred form for making modifications,\r
+ including but not limited to software source code, documentation\r
+ source, and configuration files.\r
+\r
+ "Object" form shall mean any form resulting from mechanical\r
+ transformation or translation of a Source form, including but\r
+ not limited to compiled object code, generated documentation,\r
+ and conversions to other media types.\r
+\r
+ "Work" shall mean the work of authorship, whether in Source or\r
+ Object form, made available under the License, as indicated by a\r
+ copyright notice that is included in or attached to the work\r
+ (an example is provided in the Appendix below).\r
+\r
+ "Derivative Works" shall mean any work, whether in Source or Object\r
+ form, that is based on (or derived from) the Work and for which the\r
+ editorial revisions, annotations, elaborations, or other modifications\r
+ represent, as a whole, an original work of authorship. For the purposes\r
+ of this License, Derivative Works shall not include works that remain\r
+ separable from, or merely link (or bind by name) to the interfaces of,\r
+ the Work and Derivative Works thereof.\r
+\r
+ "Contribution" shall mean any work of authorship, including\r
+ the original version of the Work and any modifications or additions\r
+ to that Work or Derivative Works thereof, that is intentionally\r
+ submitted to Licensor for inclusion in the Work by the copyright owner\r
+ or by an individual or Legal Entity authorized to submit on behalf of\r
+ the copyright owner. For the purposes of this definition, "submitted"\r
+ means any form of electronic, verbal, or written communication sent\r
+ to the Licensor or its representatives, including but not limited to\r
+ communication on electronic mailing lists, source code control systems,\r
+ and issue tracking systems that are managed by, or on behalf of, the\r
+ Licensor for the purpose of discussing and improving the Work, but\r
+ excluding communication that is conspicuously marked or otherwise\r
+ designated in writing by the copyright owner as "Not a Contribution."\r
+\r
+ "Contributor" shall mean Licensor and any individual or Legal Entity\r
+ on behalf of whom a Contribution has been received by Licensor and\r
+ subsequently incorporated within the Work.\r
+\r
+ 2. Grant of Copyright License. Subject to the terms and conditions of\r
+ this License, each Contributor hereby grants to You a perpetual,\r
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+ copyright license to reproduce, prepare Derivative Works of,\r
+ publicly display, publicly perform, sublicense, and distribute the\r
+ Work and such Derivative Works in Source or Object form.\r
+\r
+ 3. Grant of Patent License. Subject to the terms and conditions of\r
+ this License, each Contributor hereby grants to You a perpetual,\r
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r
+ (except as stated in this section) patent license to make, have made,\r
+ use, offer to sell, sell, import, and otherwise transfer the Work,\r
+ where such license applies only to those patent claims licensable\r
+ by such Contributor that are necessarily infringed by their\r
+ Contribution(s) alone or by combination of their Contribution(s)\r
+ with the Work to which such Contribution(s) was submitted. If You\r
+ institute patent litigation against any entity (including a\r
+ cross-claim or counterclaim in a lawsuit) alleging that the Work\r
+ or a Contribution incorporated within the Work constitutes direct\r
+ or contributory patent infringement, then any patent licenses\r
+ granted to You under this License for that Work shall terminate\r
+ as of the date such litigation is filed.\r
+\r
+ 4. Redistribution. You may reproduce and distribute copies of the\r
+ Work or Derivative Works thereof in any medium, with or without\r
+ modifications, and in Source or Object form, provided that You\r
+ meet the following conditions:\r
+\r
+ (a) You must give any other recipients of the Work or\r
+ Derivative Works a copy of this License; and\r
+\r
+ (b) You must cause any modified files to carry prominent notices\r
+ stating that You changed the files; and\r
+\r
+ (c) You must retain, in the Source form of any Derivative Works\r
+ that You distribute, all copyright, patent, trademark, and\r
+ attribution notices from the Source form of the Work,\r
+ excluding those notices that do not pertain to any part of\r
+ the Derivative Works; and\r
+\r
+ (d) If the Work includes a "NOTICE" text file as part of its\r
+ distribution, then any Derivative Works that You distribute must\r
+ include a readable copy of the attribution notices contained\r
+ within such NOTICE file, excluding those notices that do not\r
+ pertain to any part of the Derivative Works, in at least one\r
+ of the following places: within a NOTICE text file distributed\r
+ as part of the Derivative Works; within the Source form or\r
+ documentation, if provided along with the Derivative Works; or,\r
+ within a display generated by the Derivative Works, if and\r
+ wherever such third-party notices normally appear. The contents\r
+ of the NOTICE file are for informational purposes only and\r
+ do not modify the License. You may add Your own attribution\r
+ notices within Derivative Works that You distribute, alongside\r
+ or as an addendum to the NOTICE text from the Work, provided\r
+ that such additional attribution notices cannot be construed\r
+ as modifying the License.\r
+\r
+ You may add Your own copyright statement to Your modifications and\r
+ may provide additional or different license terms and conditions\r
+ for use, reproduction, or distribution of Your modifications, or\r
+ for any such Derivative Works as a whole, provided Your use,\r
+ reproduction, and distribution of the Work otherwise complies with\r
+ the conditions stated in this License.\r
+\r
+ 5. Submission of Contributions. Unless You explicitly state otherwise,\r
+ any Contribution intentionally submitted for inclusion in the Work\r
+ by You to the Licensor shall be under the terms and conditions of\r
+ this License, without any additional terms or conditions.\r
+ Notwithstanding the above, nothing herein shall supersede or modify\r
+ the terms of any separate license agreement you may have executed\r
+ with Licensor regarding such Contributions.\r
+\r
+ 6. Trademarks. This License does not grant permission to use the trade\r
+ names, trademarks, service marks, or product names of the Licensor,\r
+ except as required for reasonable and customary use in describing the\r
+ origin of the Work and reproducing the content of the NOTICE file.\r
+\r
+ 7. Disclaimer of Warranty. Unless required by applicable law or\r
+ agreed to in writing, Licensor provides the Work (and each\r
+ Contributor provides its Contributions) on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
+ implied, including, without limitation, any warranties or conditions\r
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r
+ PARTICULAR PURPOSE. You are solely responsible for determining the\r
+ appropriateness of using or redistributing the Work and assume any\r
+ risks associated with Your exercise of permissions under this License.\r
+\r
+ 8. Limitation of Liability. In no event and under no legal theory,\r
+ whether in tort (including negligence), contract, or otherwise,\r
+ unless required by applicable law (such as deliberate and grossly\r
+ negligent acts) or agreed to in writing, shall any Contributor be\r
+ liable to You for damages, including any direct, indirect, special,\r
+ incidental, or consequential damages of any character arising as a\r
+ result of this License or out of the use or inability to use the\r
+ Work (including but not limited to damages for loss of goodwill,\r
+ work stoppage, computer failure or malfunction, or any and all\r
+ other commercial damages or losses), even if such Contributor\r
+ has been advised of the possibility of such damages.\r
+\r
+ 9. Accepting Warranty or Additional Liability. While redistributing\r
+ the Work or Derivative Works thereof, You may choose to offer,\r
+ and charge a fee for, acceptance of support, warranty, indemnity,\r
+ or other liability obligations and/or rights consistent with this\r
+ License. However, in accepting such obligations, You may act only\r
+ on Your own behalf and on Your sole responsibility, not on behalf\r
+ of any other Contributor, and only if You agree to indemnify,\r
+ defend, and hold each Contributor harmless for any liability\r
+ incurred by, or claims asserted against, such Contributor by reason\r
+ of your accepting any such warranty or additional liability.\r
+\r
+ END OF TERMS AND CONDITIONS\r
+\r
+ APPENDIX: How to apply the Apache License to your work.\r
+\r
+ To apply the Apache License to your work, attach the following\r
+ boilerplate notice, with the fields enclosed by brackets "[]"\r
+ replaced with your own identifying information. (Don't include\r
+ the brackets!) The text should be enclosed in the appropriate\r
+ comment syntax for the file format. We also recommend that a\r
+ file or class name and description of purpose be included on the\r
+ same "printed page" as the copyright notice for easier\r
+ identification within third-party archives.\r
+\r
+ Copyright [yyyy] [name of copyright owner]\r
+\r
+ Licensed under the Apache License, Version 2.0 (the "License");\r
+ you may not use this file except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+\r
--- /dev/null
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Apache License, Version 2.
+Please, see the LICENSE.APLv2 file for Apache License, Version 2 terms and conditions.
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#undef LOG_TAG
+#define LOG_TAG "INSTALLER_SVC"
+
+#if !defined(PACKAGE)
+#define PACKAGE "installer-service"
+#endif
+
+#define GRP_MAIN "main"
--- /dev/null
+installer-service device::app_logging w
+installer-service app.default include
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.installer" version="0.1.0" install-location="internal-only">
+ <label>installer-service</label>
+ <author email="samsung.kim@samsung.com" href="www.samsung.com">Samsung Kim</author>
+ <description>Installer service application</description>
+
+ <ui-application component-type="svcapp" auto-restart="false" on-boot="false"
+ appid="org.tizen.installer-service"
+ exec="/usr/apps/org.tizen.installer/bin/installer-service"
+ nodisplay="true" multiple="false" type="capp" taskmanage="false">
+ <label>installer-service</label>
+ <label xml:lang="en-us">InstallerService</label>
+ <label xml:lang="ko-kr">InstallerService</label>
+ </ui-application>
+</manifest>
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <dlog.h>
+#include <service_app.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <aul.h>
+#include <bundle.h>
+#include <errno.h>
+
+#include <appsvc.h>
+#include <notification.h>
+#include <notification_internal.h>
+
+#include <pkgmgr-info.h>
+#include <package-manager.h>
+#include <package-manager-types.h>
+
+#include "installer-service.h"
+
+#define KEY_PACKAGE_LABEL "__KEY_PACKAGE_LABEL__"
+#define KEY_PACKAGE_PATH "__KEY_PACKAGE_PATH__"
+#define KEY_PACKAGE_ICON_PATH "__KEY_PACKAGE_ICON_PATH__"
+
+static const char DEFAULT_ICON[] = "/usr/apps/org.tizen.installer/shared/res/org.tizen.installer.png";
+
+typedef struct _appdata
+{
+ char *file_path;
+ char *pkg_label;
+ char *pkg_icon_path;
+} appdata;
+
+pkgmgr_client *__pc;
+int __priv_id;
+
+static char * __get_file_extension(const char *file_path)
+{
+ return strrchr(file_path, '.') + 1;
+}
+
+static int __get_pkg_mainappid(const char *pkgid, char **mainappid)
+{
+ int res = 0;
+ char *appid = NULL;
+ pkgmgrinfo_pkginfo_h handle;
+ res = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+ if (res != PMINFO_R_OK)
+ {
+ LOGE("%s pkgmgrinfo_pkginfo_get_pkginfo() failed.(%d)", __func__, res);
+ return -1;
+ }
+ res = pkgmgrinfo_pkginfo_get_mainappid(handle, &appid);
+ if (res != PMINFO_R_OK)
+ {
+ LOGE("%s pkgmgrinfo_pkginfo_get_mainappid() failed.(%d)", __func__, res);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+ return -1;
+ }
+ *mainappid = strdup(appid);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+ return 0;
+}
+
+static int __get_pkg_icon(const char *pkgid, char **pkg_icon_path)
+{
+ int res = 0;
+ char *icon = NULL;
+ pkgmgrinfo_pkginfo_h handle;
+ res = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+ if (res != PMINFO_R_OK)
+ {
+ LOGE("%s pkgmgrinfo_pkginfo_get_pkginfo() failed.(%d)", __func__, res);
+ return -1;
+ }
+ res = pkgmgrinfo_pkginfo_get_icon(handle, &icon);
+ if (res != PMINFO_R_OK)
+ {
+ LOGE("%s pkgmgrinfo_pkginfo_get_icon() failed.(%d)", __func__, res);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+ return -1;
+ }
+
+ if (icon == NULL)
+ {
+ LOGE("%s icon is NULL.(%d)", __func__, res);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+ return -1;
+ }
+
+ *pkg_icon_path = strdup(icon);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+ return 0;
+}
+
+int __notify_notification(const char *pkg_id, const char *pkg_label, const char *pkg_icon_path, bool result)
+{
+ notification_h noti_h = NULL;
+ notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
+
+ noti_h = notification_create(NOTIFICATION_TYPE_NOTI);
+ if (noti_h == NULL)
+ {
+ LOGE("%s notification_create() failed.", __func__);
+ return -1;
+ }
+
+ if(result)
+ {
+ noti_err = notification_set_text(noti_h, NOTIFICATION_TEXT_TYPE_TITLE, "Installation completed.", NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+ }
+ else
+ {
+ noti_err = notification_set_text(noti_h, NOTIFICATION_TEXT_TYPE_TITLE, "Installation failed.", NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+ }
+
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_set_text() failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+ return -1;
+ }
+
+ noti_err = notification_set_text(noti_h, NOTIFICATION_TEXT_TYPE_CONTENT, pkg_label, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_set_ ... failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+ return -1;
+ }
+
+ noti_err = notification_set_image(noti_h, NOTIFICATION_IMAGE_TYPE_ICON, pkg_icon_path);
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_set_image(icon) failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+ return -1;
+ }
+
+ noti_err = notification_set_image(noti_h, NOTIFICATION_IMAGE_TYPE_ICON_FOR_INDICATOR, pkg_icon_path);
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_set_image(indicator) failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+ return -1;
+ }
+
+ //TODO: Add sound state checking routine.
+ noti_err = notification_set_sound(noti_h, NOTIFICATION_SOUND_TYPE_DEFAULT, NULL);
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_set_sound() failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+ return -1;
+ }
+
+ //TODO: Add vibration state checking routine.
+ noti_err = notification_set_vibration(noti_h, NOTIFICATION_VIBRATION_TYPE_DEFAULT, NULL);
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_set_vibration() failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+ return -1;
+ }
+
+ // App launch
+ char *mainappid = NULL;
+ int res = 0;
+ res = __get_pkg_mainappid(pkg_id, &mainappid);
+ if (res < 0)
+ {
+ LOGE("%s __get_pkg_mainappid() failed.(%d)", __func__, res);
+ }
+ SECURE_LOGI("%s launch pkg_id: %s, mainappid: %s", __func__, pkg_id, mainappid);
+
+ bundle *b = NULL;
+ b = bundle_create();
+ if (b == NULL)
+ {
+ LOGE("%s bundle_create() failed.", __func__);
+ notification_free(noti_h);
+ free(mainappid);
+ return -1;
+ }
+ appsvc_set_operation(b, "http://tizen.org/appcontrol/operation/view");
+ appsvc_set_appid(b, mainappid);
+ noti_err = notification_set_execute_option(noti_h, NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH, NULL, NULL, b);
+
+ if (b)
+ {
+ bundle_free(b);
+ }
+
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_set_execute_option() failed.", __func__);
+ notification_free(noti_h);
+ free(mainappid);
+ return -1;
+ }
+ free(mainappid);
+
+ noti_err = notification_insert(noti_h, &__priv_id);
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_insert() failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+
+ return -1;
+ }
+
+/*
+ noti_err = notification_update(noti_h);
+ if (noti_err != NOTIFICATION_ERROR_NONE)
+ {
+ LOGE("%s notification_update() failed.(%d)", __func__, noti_err);
+ notification_free(noti_h);
+ return -1;
+ }
+*/
+ return 0;
+}
+
+
+int _install_cb(int req_id, const char *pkg_type,
+ const char *pkgid, const char *key,
+ const char *val, const void *pmsg, void *data)
+{
+ LOGD("%s pkgmgr_handler()", __func__);
+
+ appdata *ad = (appdata *)data;
+ bool result = true;
+
+ if (strcmp(key, "start") == 0)
+ {
+ char str[256];
+ snprintf(str, 256, "installing %s.%s ..", pkgid, pkg_type);
+ notification_status_message_post(str);
+ }
+ else if (strcmp(key, "install_percent") == 0)
+ {
+ //TODO: percent bar
+ int percent = atoi(val);
+ notification_update_progress(NULL, __priv_id, (double)(percent/100));
+ }
+ else if (strcmp(key, "end") == 0)
+ {
+ if(strcasecmp(val,"fail") == 0){
+ result = false;
+ }
+ SECURE_LOGD("pkg_type(%s), pkgid(%s), key(%s), val(%s), label(%s), icon_path(%s) result(%d)"
+ , pkg_type, pkgid, key, val, ad->pkg_label, ad->pkg_icon_path, result);
+
+ char *pkg_icon_path = NULL;
+ int res = __get_pkg_icon(pkgid, &pkg_icon_path);
+ if (res < 0)
+ {
+ pkg_icon_path = strdup(DEFAULT_ICON);
+ }
+
+ res = __notify_notification(pkgid, ad->pkg_label, pkg_icon_path, result);
+ if (res < 0)
+ {
+ LOGE("%s __notify_notification() failed.(%d)", __func__, res);
+ free(pkg_icon_path);
+ return -1;
+ }
+
+ if (__pc)
+ {
+ int request_id = pkgmgr_client_free(__pc);
+ if (request_id < 0)
+ {
+ LOGE("%s pkgmgr_client_free() failed.(%d)", __func__, request_id);
+ free(pkg_icon_path);
+ return -1;
+ }
+ }
+ if (pkg_icon_path)
+ {
+ free(pkg_icon_path);
+ }
+
+ service_app_exit();
+ }
+ return 0;
+}
+
+int __install_package(const appdata *ad)
+{
+ if (ad->file_path == NULL)
+ {
+ LOGE("%s file_path is NULL", __func__);
+ return -1;
+ }
+ if (ad->pkg_label == NULL)
+ {
+ LOGE("%s pkg_label is NULL", __func__);
+ return -1;
+ }
+ LOGD("%s Install file_path[%s] pkg_label[%s] ", __func__, ad->file_path, ad->pkg_label);
+
+ int request_id = 0;
+ char *extension = NULL;
+
+ __pc = pkgmgr_client_new(PC_REQUEST);
+ if (__pc == NULL)
+ {
+ LOGE("%s pkgmgr_client_new(PC_REQUEST) failed", __func__);
+ }
+
+ extension = __get_file_extension(ad->file_path);
+ LOGD("%s Install extension = [%s]", __func__, extension);
+
+ request_id = pkgmgr_client_install(__pc, extension, NULL, ad->file_path, NULL,
+ PM_QUIET, _install_cb, (void *)ad);
+ if (request_id < 0)
+ {
+ LOGE("%s pkgmgr_client_isntall fail(%d)", __func__, request_id);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+static int __parse_argv(int argc, char **argv, appdata *ad)
+{
+ LOGD("%s", __func__);
+ static bundle *b = NULL;
+ if (b)
+ {
+ bundle_free(b);
+ }
+
+ b = bundle_import_from_argv(argc, argv);
+ if (b == NULL)
+ {
+ LOGD("%s bundle for bundle_import_from_argv is NULL", __func__);
+ }
+
+ errno = 0;
+ if (bundle_get_val(b, KEY_PACKAGE_PATH))
+ {
+ ad->file_path = (char *)bundle_get_val(b, KEY_PACKAGE_PATH);
+ }
+ if (bundle_get_val(b, KEY_PACKAGE_LABEL))
+ {
+ ad->pkg_label = (char *)bundle_get_val(b, KEY_PACKAGE_LABEL);
+ }
+ if (bundle_get_val(b, KEY_PACKAGE_ICON_PATH))
+ {
+ ad->pkg_icon_path = (char *)bundle_get_val(b, KEY_PACKAGE_ICON_PATH);
+ }
+
+ if (errno)
+ {
+ LOGE("%s errno: %d(%s)", __func__, errno, strerror(errno));
+ return -1;
+ }
+ return 0;
+}
+
+
+static bool __service_create(void* data)
+{
+ return true;
+}
+
+static void __service_terminate(void* data)
+{
+ LOGD("%s", __func__);
+ return;
+}
+
+static void __service_control(app_control_h app_control, void* data)
+{
+ appdata *ad = (appdata *)data;
+ int res = 0;
+
+ res = __install_package(ad);
+ if (res < 0)
+ {
+ LOGE("%s __install_package() failed.(%d)", __func__, res);
+ service_app_exit();
+ }
+
+ return;
+}
+
+int main(int argc, char* argv[])
+{
+ LOGD("service_app_main() is called");
+
+ appdata ad = {0,};
+ service_app_lifecycle_callback_s callback = {0,};
+
+ callback.create = __service_create;
+ callback.terminate = __service_terminate;
+ callback.app_control = __service_control;
+
+ if (__parse_argv(argc, argv, &ad))
+ {
+ LOGE("%s Failed to parse argv()", __func__);
+ return -1;
+ }
+
+ return service_app_main(argc, argv, &callback, &ad);
+}
--- /dev/null
+#define FONT_NAME "GP45_ArabCJK_TouchWiz"
+
+collections {
+
+ group {
+ name, "main";
+
+ parts {
+ part { name, "background";
+ type, RECT;
+ description {
+ state, "default" 0.0;
+ color, 0 0 0 255;
+ }
+ }
+
+ part { name, "txt_title";
+ type, TEXT;
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ rel1 { relative, 0.0 0.0; to, background; }
+ rel2 { relative, 1.0 0.5; to, background; }
+ text { font, FONT_NAME; size, 30; align, 0.5 0.5; }
+ color, 255 255 255 255;
+ }
+ }
+
+ part { name, "txt_mesg";
+ type, TEXT;
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ rel1 { relative, 0.0 0.5; to, background; }
+ rel2 { relative, 1.0 1.0; to, background; }
+ text { font, FONT_NAME; size, 30; align, 0.5 0.5; }
+ color, 255 255 255 255;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name, "click_exit";
+ source, "background";
+ signal, "mouse,clicked,1";
+ action, SIGNAL_EMIT "EXIT" "EDJ";
+ }
+ }
+ }
+}
--- /dev/null
+root org.tizen.installer rw----
+_default_ org.tizen.installer rw----
+org.tizen.installer system::vconf_multimedia r-----
+org.tizen.installer svi-data r-x---
+org.tizen.installer ug-setting-call-efl::vconf r----l
+org.tizen.installer system::vconf_setting r----l
+org.tizen.installer system::vconf_inhouse r----l
+org.tizen.installer system::ext_storage r-x---
+org.tizen.installer pkgmgr::db r----l
+org.tizen.installer isf r-x---
+org.tizen.installer pkgmgr::svc r-x---
+org.tizen.installer xorg -w----
+org.tizen.installer system::share rwxat-
+org.tizen.installer system::media rwxat-
+org.tizen.installer system::homedir rwxat-
+org.tizen.installer org.tizen.indicator rw----
+org.tizen.installer system::vconf rwxat-
+org.tizen.installer aul::launch --x---
+org.tizen.installer org.tizen.indicator rw----
+org.tizen.installer data-provider-master::notification.client rw----
+org.tizen.installer data-provider-master::notification -w----
+org.tizen.installer ail::db rw----
+org.tizen.installer dbus r-----
+e17 org.tizen.installer rwx---
--- /dev/null
+<manifest>
+ <define>
+ <domain name="org.tizen.installer" />
+ <permit>
+<!--
+ <smack permit="org.tizen.app-tray" type="rwx" />
+ <smack permit="org.tizen.homescreen" type="x" />
+ <smack permit="org.tizen.myfile-lite" type="x" />
+-->
+ <smack permit="e17" type="rwx" />
+ </permit>
+ <request>
+ <smack request="dbus" type="r" />
+ <smack request="ail::db" type="rw" />
+ <smack request="data-provider-master::notification" type="w" />
+ <smack request="data-provider-master::notification.client" type="rw" />
+ <smack request="org.tizen.indicator" type="rw" />
+ <smack request="aul::launch" type="x" />
+ <smack request="system::vconf" type="rwxat" />
+ <smack request="org.tizen.indicator" type="rw" />
+ <smack request="system::homedir" type="rwxat" />
+ <smack request="system::media" type="rwxat" />
+ <smack request="system::share" type="rwxat" />
+ <smack request="xorg" type="w" />
+ <smack request="pkgmgr::svc" type="rx" />
+ <smack request="isf" type="rx"/>
+ <smack request="pkgmgr::db" type="lr" />
+ <smack request="system::ext_storage" type="rx" />
+ <smack request="system::vconf_inhouse" type="lr" />
+ <smack request="system::vconf_setting" type="lr" />
+ <smack request="ug-setting-call-efl::vconf" type="lr" />
+ <smack request="svi-data" type="rx" />
+ <smack request="system::vconf_multimedia" type="r" />
+ </request>
+ </define>
+ <assign>
+ <filesystem path="/usr/share/icons/default/small/org.tizen.installer.png" label="_" />
+ </assign>
+</manifest>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.installer" version="0.0.1" install-location="internal-only">
+ <label>Installer</label>
+ <author email="gs_.jung@samsung.com" href="www.samsung.com">Gyeongseok Jeong</author>
+ <description>Installer</description>
+ <ui-application
+ appid="org.tizen.installer"
+ exec="/usr/apps/org.tizen.installer/bin/org.tizen.installer"
+ nodisplay="true" multiple="false" type="capp" taskmanage="false">
+ <icon>org.tizen.installer.png</icon>
+ <label>installer</label>
+ <application-service>
+ <operation name="http://tizen.org/appcontrol/operation/view"/>
+ <mime name="application/widget"/>
+ <mime name="application/vnd.wac.widget-sharing"/>
+ <mime name="application/x-rpm"/>
+ <mime name="application/x-redhat-package-manager"/>
+ <mime name="application/vnd.tizen.package"/>
+ </application-service>
+ <label xml:lang="en-us">Installer</label>
+ <label xml:lang="ko-kr">Installer</label>
+ </ui-application>
+ <service-application
+ component-type="svcapp" auto-restart="false" on-boot="false"
+ appid="org.tizen.installer-service"
+ exec="/usr/apps/org.tizen.installer/bin/installer-service"
+ nodisplay="true" multiple="false" type="capp" taskmanage="false">
+ <icon>org.tizen.installer.png</icon>
+ <label>installer-service</label>
+ <label xml:lang="en-us">InstallerService</label>
+ <label xml:lang="ko-kr">InstallerService</label>
+ </service-application>
+</manifest>
--- /dev/null
+Name: org.tizen.installer
+Summary: installer application
+Version: 0.0.9
+Release: 1
+Group: TO_BE/FILLED_IN
+License: Apache-2.0
+Source0: %{name}-%{version}.tar.gz
+Requires: rpm-installer
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
+BuildRequires: pkgconfig(capi-appfw-service-application)
+BuildRequires: pkgconfig(utilX)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(x11)
+BuildRequires: pkgconfig(appsvc)
+BuildRequires: pkgconfig(pkgmgr-info)
+BuildRequires: pkgconfig(capi-appfw-package-manager)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(pkgmgr)
+BuildRequires: pkgconfig(notification)
+BuildRequires: pkgconfig(capi-security-privilege-manager)
+
+BuildRequires: gettext-tools
+
+BuildRequires: hash-signer
+BuildRequires: efl-assist-devel
+
+BuildRequires: app-svc
+
+BuildRequires: cmake
+BuildRequires: edje-bin
+
+
+%description
+installer application
+
+%package devel
+Summary: Development files for %{name}
+Group: Development/Libraries
+Requires: %{name} = %{version}-%{release}
+%description devel
+Development files for %{name}
+
+%package service
+Summary: installer-service
+Group: Development/Libraries
+Requires: %{name} = %{version}-%{release}
+%description service
+installer-service
+
+%prep
+%setup -q
+
+%build
+%if 0%{?sec_build_binary_debug_enable}
+export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE"
+export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
+%endif
+
+cmake . -DCMAKE_INSTALL_PREFIX=/usr
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+%define tizen_sign 1
+%define tizen_sign_base /usr/apps/org.tizen.installer
+%define tizen_sign_level platform
+%define tizen_author_sign 1
+%define tizen_dist_sign 1
+mkdir -p %{buildroot}/usr/share/license
+cp LICENSE.APLv2 %{buildroot}/usr/share/license/%{name}
+
+%post
+/usr/bin/signing-client/hash-signer-client.sh -a -d -p platform /usr/apps/org.tizen.installer
+rpm-backend -k coretpk -i /usr/apps/org.tizen.installer
+
+%files
+%manifest org.tizen.installer.manifest
+/usr/apps/org.tizen.installer/*
+/usr/apps/org.tizen.installer/author-signature.xml
+/usr/apps/org.tizen.installer/signature1.xml
+/usr/share/packages/org.tizen.installer.xml
+/usr/share/license/%{name}
+/etc/smack/accesses.d/%{name}.efl
--- /dev/null
+# for i18n
+
+SET(POFILES as.po bn.po en_PH.po en.po en_US.po es_US.po gu.po hi.po id.po km.po kn.po ko_KR.po lo.po ml.po mr.po ms.po my.po ne.po or.po pa.po pt_BR.po si.po ta.po te.po th.po tl.po ur.po vi.po zh_CN.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/apps/${INSTALLER_PKG_NAME}/res/locale/${lang}/LC_MESSAGES RENAME ${INSTALLER_PKG_NAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
--- /dev/null
+# List of source files containing translatable strings.
+app-selector.c
+app-selector-view.c
+app-selector-util.c
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "বাতিল"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "সকিয়নী"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "অনুমতিৰ প্ৰয়োজন"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "এই এপ্লিকেশ্বনটোৱে ক্ষতিকাৰক হ'ব পাৰে আৰু আপোনাৰ ডিভাইচ বা ডাটাক নষ্ট কৰিব পাৰে৷"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "আপোনাৰ ডিভাইচত এই সংস্কৰণটো ইতিমধ্যে ইনষ্টল হৈ আছে৷ ইয়াক পুনৰাই ইনষ্টল কৰা হ'ব৷"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "আপোনাৰ ডিভাইচত এটা পুৰণি সংস্কৰণ ইতিমধ্যে ইনষ্টল হৈ আছে৷ ইয়াক আপডেট কৰা হ'ব৷"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "আপোনাৰ ডিভাইচত এটা নতুন সংস্কৰণ ইতিমধ্যে ইনষ্টল হৈ আছে৷ ইয়াক পুৰণি সংস্কৰণটোৰ দ্বাৰা স্থানান্তৰ কৰা হ'ব৷"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "পুনঃইনষ্টল"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "আপডেট কৰক"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "এই ফাইলটো ইনষ্টল কৰাত অক্ষম৷ ফৰ্মেটটো অমান্য৷"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "অনুমতি আৰু ইনষ্টল কৰক"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ডাউনলোড কৰা সংস্কৰণ:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ইনষ্টল কৰা সংস্কৰণ:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "বাতিল"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "সাবধানতা"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "অনুমতিপ্রাপ্ত অনুরোধগুলি"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "এই অ্যাপ্লিকেশনটি ক্ষতিকারক হতে পারে এবং আপনার ডিভাইস বা তথ্যের ক্ষতি করতে পারে।"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "এই সংস্করণটি আপনার ডিভাইসে ইতিমধ্যে ইনস্টল আছে৷ এটি পুনরায় ইনস্টল করা হবে৷"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "আপনার ডিভাইসে একটি পুরানো সংস্করণ ইতিমধ্যে ইনস্টল আছে৷ এটি আপডেট হবে৷"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "আপনার ডিভাইসে একটি নতুন সংস্করণ ইতিমধ্যে ইনস্টল আছে৷ এটি পুরানো সংস্করণের সাথে প্রতিস্থাপিত হবে৷"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "পুনরায় ইনস্টল করুন"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "আপডেট"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "এই ফাইলটি ইনস্টল করতে অক্ষম৷ এই বিন্যাসটি অবৈধ৷"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "অনুমতি দিন ও ইনস্টল করুন"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ডাউনলোড করা সংস্করণ:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ইনস্টল করা সংস্করণ:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Cancel"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Warning"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Permission requests"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "This application may be harmful and damage your device or data."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "This version is already installed on your device. It will be reinstalled."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "An older version is already installed on your device. It will be updated."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "A newer version is already installed on your device. It will be replaced with the older version."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Reinstall"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Update"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Unable to install this file. The format is invalid."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Allow and install"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Downloaded version:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Installed version:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Cancel"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Warning"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Permission requests"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "This application may be harmful and damage your device or data."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "This version is already installed on your device. It will be reinstalled."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "An older version is already installed on your device. It will be updated."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "A newer version is already installed on your device. It will be replaced with the older version."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Reinstall"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Update"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Unable to install this file. The format is invalid."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Allow and install"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Downloaded version:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Installed version:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Cancel"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Warning"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Permission requests"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "This application may be harmful, and may damage your device or data."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "This version is already installed on your device. It will be reinstalled."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "An older version is already installed on your device. It will be updated."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "A newer version is already installed on your device. It will be replaced with the older version."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Reinstall"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Update"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Unable to install this file. The format is invalid."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Allow and install"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Downloaded version:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Installed version:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Cancelar"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Aviso"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Solicitudes de permisos"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "Esta aplicación puede ser dañina y estropear su dispositivo o datos."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "Esta versión ya está instalada en el dispositivo. Se reinstalará."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "Ya hay una versión anterior instalada en el dispositivo. Se actualizará."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "Hay una versión más reciente instalada en el dispositivo. Se sustituirá con la versión anterior."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Reinstalar"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Actualizar"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "No es posible instalar este archivo. El formato no es válido."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Permitir e instalar"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Versión descargada:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Versión instalada:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "રદ કરો"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "ચેતવણી"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "વિનંતીઓને પરવાનગી આપો"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "આ એપ્લિકેશન નુકસાનકારક હોય શકે છે અને તમારા ઉપકરણ અથવા ડેટાને ક્ષતિ પહોંચાડી શકે છે."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "તમારા ઉપકરણ પર આ સંસ્કરણ પહેલાંથી સ્થાપેલું છે. તેને ફરીથી સ્થાપવામાં આવશે."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "તમારા ઉપકરણ પર એક જૂનું સંસ્કરણ પહેલાંથી સ્થાપેલું છે. તેને અપડેટ કરવામાં આવશે."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "તમારા ઉપકરણ પર એક નવું સંસ્કરણ પહેલાંથી સ્થાપેલું છે. તેને જૂના સંસ્કરણ સાથે બદલવામાં આવશે."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ફરીથી સ્થાપિત કરો"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "અપડેટ કરો"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "આ ફાઇલને સ્થાપવામાં અસમર્થ. સ્વરૂપ અમાન્ય છે."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "મંજૂરી આપો અને સ્થાપો"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ડાઉનલોડ કરેલું સંસ્કરણ:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "સ્થાપેલું સંસ્કરણ:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "रद्द करें"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "चेतावनी"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "अनुमति के अनुरोध"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "यह ऐप्लिकेशन हानिकारक हो सकता है और आपके डिवाइस या डाटा को क्षति पहुँचा सकती है"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "यह संस्करण आपके डिवाइस पर पहले से स्थापित है। इसे पुन: स्थापित किया जाएगा।"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "एक पुराना संस्करण आपके डिवाइस पर पहले से स्थापित है। इसे अपडेट किया जाएगा।"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "एक नया संस्करण आपके डिवाइस पर पहले से स्थापित है। इसे पुराने संस्करण के साथ बदला जाएगा।"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "पुन: स्थापना करें"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "अपडेट करें"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "इस फ़ाइल को स्थापित करने में अक्षम। फ़ॉर्मेट अमान्य है।"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "अनुमति दें और स्थापित करें"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "डाउनलोड किया गया संस्करण:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "स्थापित संस्करण:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Batal"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Peringatan"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Permintaan izin"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "Aplikasi ini dapat membahayakan dan merusak perangkat atau data Anda."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "Versi ini sudah diinstal di perangkat Anda. Versi ini akan diinstal ulang."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "Versi lebih lama sudah diinstal di perangkat Anda. Versi tersebut akan diperbarui."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "Versi lebih baru sudah diinstal di perangkat Anda. Versi tersebut akan digantikan dengan versi yang lebih lama."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Instal ulang"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Prbrui"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Tidak dapat menginstal file ini. Format tidak valid."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Izinkan dan instal"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Versi yang diunduh:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Versi yang diinstal:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "បោះបង់"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "សូមប្រយ័ត្ន"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "សំណើសុំការអនុញ្ញាត"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "កម្មវិធីនេះអាចបង្កអន្តរាយ និង ធ្វើឲ្យឧបករណ៍ ឬ ទិន្នន័យរបស់អ្នកខូច។"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "បានដំឡើងកំណែនេះលើឧបករណ៍របស់អ្នកហើយ។ វានឹងត្រូវបានដំឡើងឡើងវិញ។"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "កំណែចាស់ជាងនេះបានដំឡើងលើឧបករណ៍របស់អ្នកហើយ។ នឹងអាប់ដេតវា។"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "កំណែថ្មីជាងនេះបានដំឡើងលើឧបករណ៍របស់អ្នកហើយ។ នឹងជំនួសវាដោយកំណែចាស់ជាងនេះ។"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ដំឡើងឡើងវិញ"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "អាប់ដេត"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "មិនអាចដំឡើងឯកសារនេះ។ ទ្រង់ទ្រាយអសុពលភាព។"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "អនុញ្ញាត និង ដំឡើង"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "កំណែដែលបានទាញយក៖"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "កំណែដែលបានដំឡើង៖"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "ರದ್ದು"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "ಎಚ್ಚರಿಕೆ"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "ಅನುಮತಿಯ ವಿನಂತಿಗಳು"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "ಈ ಅನ್ವಹಿಸುವಿಕೆ ಹಾನಿಕಾರಕವಾಗಿರಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಸಾಧನ ಅಥವಾ ಡೇಟಾಕ್ಕೆ ಹಾನಿ ಮಾಡಬಹುದು."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಈ ಆವೃತ್ತಿಯು ಈಗಾಗಲೇ ಸ್ಥಾಪಿತವಾಗಿರುತ್ತದೆ. ಇದನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುವುದು."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಒಂದು ಹಳೆಯ ಆವೃತ್ತಿಯು ಈಗಾಗಲೇ ಸ್ಥಾಪಿತವಾಗಿರುತ್ತದೆ. ಇದನ್ನು ನವೀಕರಿಸಲಾಗುವುದು."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಒಂದು ಹೊಸದಾದ ಆವೃತ್ತಿಯು ಈಗಾಗಲೇ ಸ್ಥಾಪಿತವಾಗಿರುತ್ತದೆ. ಇದರ ಬದಲು ಹಳೆಯ ಆವೃತ್ತಿಯನ್ನು ಅಳವಡಿಸಲಾಗುವುದು."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ಮರುಸ್ಥಾಪಿಸು"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "ನವೀಕರಿಸು"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ಈ ಫೈಲ್ ಸ್ಥಾಪಿಸಲು ಅಸಮರ್ಥ. ಈ ಫಾರ್ಮ್ಯಾಟ್ ಅಮಾನ್ಯವಾಗಿದೆ."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "ಅನುಮತಿಸು ಮತ್ತು ಸ್ಥಾಪಿಸು"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ಡೌನ್ಲೋಡ್ ಮಾಡಿರುವ ಆವೃತ್ತಿ:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ಸ್ಥಾಪಿಸಿದ ಆವೃತ್ತಿ:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "취소"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "경고"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "권한 요청"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "이 애플리케이션은 디바이스나 데이터를 손상시킬 수 있습니다."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "이 버전을 이미 디바이스에 설치하였습니다. 다시 설치합니다."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "이전 버전이 디바이스에 설치된 상태입니다. 업데이트합니다."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "새 버전이 이미 디바이스에 설치된 상태입니다. 이전 버전으로 대체합니다."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "다시 설치"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "업데이트"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "형식이 바르지 않아 이 파일을 설치할 수 없습니다."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "허용 및 설치"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "다운로드한 버전:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "설치한 버전:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "ຍົກເລີກ"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "ເຕືອນ"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "ການສະເໜີຂໍການອະນຸຍາດ"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "ແອພພລິເຄຊັນນີ້ອາດຈະເປັນອັນຕະລາຍ ແລະທໍາຄວາມເສຍຫາຍຕໍ່ເຄື່ອງ ຫຼືຂໍ້ມູນຂອງທ່ານ."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "ມີການຕິດຕັ້ງເວີເຊິນນີ້ໄວ້ຢູ່ໃນເຄື່ອງຂອງທ່ານແລ້ວ. ມັນຈະຖືກຕິດຕັ້ງໃໝ່."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "ມີການຕິດຕັ້ງລຸ້ນທີ່ເກົ່າກວ່າໄວ້ຢູ່ໃນເຄື່ອງຂອງທ່ານແລ້ວ. ມັນຈະຖືກອັບເດດ."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "ມີການຕິດຕັ້ງລຸ້ນທີ່ໃໝ່ກວ່າໄວ້ຢູ່ໃນເຄື່ອງຂອງທ່ານແລ້ວ. ມັນຈະຖືກປ່ຽນແທນດ້ວຍລຸ້ນທີ່ເກົ່າກວ່າ."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ຕິດຕັ້ງຄືນໃໝ່"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "ອັບເດດ"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ບໍ່ສາມາດຕິດຕັ້ງໄຟລ໌ນີ້ໄດ້ ຟໍແມັດໃຊ້ບໍ່ໄດ້."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "ອະນຸຍາດ ແລະ ຕິດຕັ້ງ"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ເວີເຊິນໄດ້ດາວໂຫຼດແລ້ວ:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ເວີເຊິນໄດ້ຕິດຕັ້ງໄວ້:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "റദ്ദ്"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "മുന്നറിയിപ്പ്"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "അനുമതി അഭ്യർത്ഥിക്കുന്നു"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "ഹാനികരമായേക്കാവുന്ന ഈ ആപ്ലിക്കേഷൻ നിങ്ങളുടെ ഉപകരണത്തെ അല്ലെങ്കിൽ ഡാറ്റയെ തകരാറിലാക്കും."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "ഈ പതിപ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ ഇതിനകം ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട്. അത് വീണ്ടും ഇൻസ്റ്റാൾ ചെയ്യപ്പെടും."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "പഴയൊരു പതിപ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ ഇതിനകം ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട്. അത് അപ്ഡേറ്റ് ചെയ്യപ്പെടും."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "പുതിയൊരു പതിപ്പ് നിങ്ങളുടെ ഉപകരണത്തിൽ ഇതിനകം ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട്. പഴയ പതിപ്പിനാൽ അത് മാറ്റപ്പെടും."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "വീണ്ടും ഇന്സ്റ്റാള് ചെയ്യുക"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "അപ്ഡേറ്റ്"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ഈ ഫയല് ഇൻസ്റ്റാൾ ചെയ്യാനാവില്ല. ഫോർമാറ്റ് അസാധുവാണ്."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "അനുവദിച്ച ശേഷം ഇൻസ്റ്റാൾ ചെയ്യുക"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ഡൌൺലോഡ് ചെയ്യപ്പെട്ട പതിപ്പ്:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ഇൻസ്റ്റാൾ ചെയ്യപ്പെട്ട പതിപ്പ്:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "रद्द करा"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "धोक्याचा इशारा"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "परवानगी विनंत्या"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "हा अनुप्रयोग कदाचित आपल्या उपकरण किंवा डेटासाठी घातक आणि नुकसानीचा असेल."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "ही आवृत्ती आधीपासूनच आपल्या उपकरणवर इन्स्टॉल केलेली आहे. हे पुन्हा इन्स्टॉल केले जाईल."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "जुनी आवृत्ती आधीपासूनच आपल्या उपकरणवर इन्स्टॉल केलेली आहे. हे अद्यतनित केले जाईल."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "नवीन आवृत्ती आधीपासूनच आपल्या उपकरणवर इन्स्टॉल केलेली आहे. हे जुन्या आवृत्तीसह बदलले जाईल."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "पुन्हा इनस्टॉल करा"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "अद्यावत"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ही फाइल इन्स्टॉल करण्यामध्ये अक्षम. स्वरूपण अवैध आहे."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "अनुमती द्या आणि इन्स्टॉल करा"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "डाउनलोड केलेली आवृत्ती:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "इन्स्टॉल केलेली आवृत्ती:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Batal"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Amaran"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Permintaan kebenaran"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "Aplikasi ini mungkin berbahaya dan merosakkan peranti atau data anda."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "Versi ini telah dipasangkan pada peranti anda. Ia akan dipasangkan semula."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "Versi terdahulu telah dipasang pada peranti anda. Ia akan dikemas kini."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "Versi lebih baru telah dipasang pada peranti anda. Ia akan digantikan dengan versi terdahulu."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Pasang semula"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Kemaskini"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Tidak dapat memasang fail ini. Format tersebut tidak sah."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Benarkan dan pasang"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Versi yang dimuat turun:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Versi yang dipasang:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "ပယ္ဖ်က္ပါ"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "သတိေပးခ်က္"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "ခြင့္ျပဳခ်က္ ေတာင္းခံသည္"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "ဤအပလီေကးရွင္းက သင့္ကိရိယာ (သို႔) ေဒတာကို ထိခိုက္ေစၿပီး ပ်က္စီးေစႏိုင္သည္။"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "ဤဗားရွင္းကို သင့္ကိရိယာေပၚတြင္ တပ္ဆင္ထားၿပီးျဖစ္သည္။ ၎ကို ျပန္တပ္ဆင္လိမ့္မည္။"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "ဗားရွင္းေဟာင္း တစ္ခုကို သင့္ကိရိယာေပၚ တပ္ဆင္ထားၿပီးျဖစ္သည္။ ၎ကို အပ္ဒိတ္လုပ္မည္။"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "ဗားရွင္းသစ္တစ္ခုကို သင့္ကိရိယာေပၚ တပ္ဆင္ထားၿပီးျဖစ္သည္။ ၎ကို ဗားရွင္းေဟာင္းျဖင့္ အစားထိုးလိမ့္မည္။"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ျပန္တပ္ဆင္ပါ"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "အပ္ဒိတ္လုပ္ပါ"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ဤဖိုင္ တပ္ဆင္ရန္ မရႏိုင္ပါ။ ေဖာ္မတ္ အက်ံဳးမဝင္ပါ။"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "ခြင့္ျပဳၿပီး တပ္ဆင္ပါ"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ေဒါင္းလုတ္လုပ္ထားေသာ ဗားရွင္း :"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "တပ္ဆင္ထားေသာ ဗားရွင္း :"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "रद्द गर्नुहोस्"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "चेतावनी"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "अनुमति अनुरोधहरू"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "यो अनुप्रयोग हानिकारक हुनसक्छ र तपाईको यन्त्र वा डाटालार्ट क्षति पुर्याउन सक्छ।"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "तपाईको यन्त्रमा यो संस्करण पहिले नै स्थापित गरिएको छ। यो पुन: स्थापना गरिनेछ।"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "तपाईको यन्त्रमा पुरानो संस्करण पहिले नै स्थापित गरिएको छ। यो अपलोड हुनेछ।"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "तपाईको यन्त्रमा नयाँ संस्करण पहिले नै स्थापित गरिएको छ। यो पुरानो संस्करण ले प्रतिस्थापित हुनेछ।"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "पुन: स्थापना गर्नुहोस"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "अपडेट"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "यो फाइल स्थापना गर्न असक्षम। ढाँचा अवैध छ।"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "अनुमति दिनुहोस् र स्थापना गर्नुहोस्"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "डाउनलोड गरिएको संस्करण:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "स्थापना गरिएको संस्करण:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "ବାତିଲ୍"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "ସତର୍କବାଣୀ"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "ଅନୁମତି ଅନୁରୋଧଗୁଡିକ"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "ଏହି ଆପ୍ଲିକେସନ୍ ହୁଏତ କ୍ଷତିକାର ହୋଇପାରେ ଏବଂ ଆପଣଙ୍କର ଡିଭାଇସ୍ କିମ୍ଵା ଡାଟା କ୍ଷତି କରିପାରେ।"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "ଆପଣଙ୍କର ଡିଭାଇସ୍ରେ ପୂର୍ବରୁ ଏହି ସଂସ୍କରଣ ସଂସ୍ଥାପିତ ହୋଇଛି। ଏହା ଅଣସଂସ୍ଥାପିତ ହେବ।"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "ଆପଣଙ୍କର ଡିଭାଇସ୍ରେ ପୂର୍ବରୁ ଏକ ପୁରୁଣା ସଂସ୍କରଣ ସଂସ୍ଥାପିତ ହୋଇଛି। ଏହା ଅଦ୍ୟତିତ ହେବ।"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "ଆପଣଙ୍କର ଡିଭାଇସ୍ରେ ପୂର୍ବରୁ ଏକ ନୂତନ ସଂସ୍କରଣ ସଂସ୍ଥାପିତ ହୋଇଛି। ଏହା ପୁରୁଣା ସଂସ୍କରଣ ସହିତ ପ୍ରତ୍ୟାବର୍ତ୍ତିତ ହେବ।"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ପୁନଃସଂସ୍ଥାପନ"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "ଅପଡେଟ୍"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ଏହି ଫାଇଲ୍ ସଂସ୍ଥାପନ କରିବାକୁ ଅସମର୍ଥ। ଫର୍ମାର୍ଟ୍ ଅବୈଧ ଅଟେ।"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "ଅନୁମତି ଏବଂ ସଂସ୍ଥାପନ"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ଡାଉନ୍ଲୋଡ୍ ହୋଇଥିବା ସଂସ୍କରଣ:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ସଂସ୍ଥାପିତ ହୋଇଥିବା ସଂସ୍କରଣ:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "ਰੱਦ ਕਰੋ"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "ਚਿਤਾਵਨੀ"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "ਇਜਾਜ਼ਤ ਲਈ ਬੇਨਤੀਆਂ"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਹਾਨੀਕਾਰਕ ਹੋ ਸਕਦੀ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਜਾਂ ਡੈਟਾ ਨੂੰ ਖਰਾਬ ਕਰ ਸਕਦੀ ਹੈ।"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "ਇਹ ਸੰਸਕਰਣ ਤੁਹਾਡੀ ਡਿਵਾਈਸ 'ਤੇ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਸਥਾਪਿਤ ਹੈ। ਇਸ ਨੂੰ ਦੁਬਾਰਾ ਸਥਾਪਿਤ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "ਤੁਹਾਡੇ ਡਿਵਾਈਸ 'ਤੇ ਇੱਕ ਪੁਰਾਣਾ ਸੰਸਕਰਣ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਸਥਾਪਿਤ ਹੈ। ਇਸ ਨੂੰ ਅਪਡੇਟ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "ਤੁਹਾਡੇ ਡਿਵਾਈਸ 'ਤੇ ਇੱਕ ਨਵਾਂ ਸੰਸਕਰਣ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਸਥਾਪਿਤ ਹੈ। ਇਸਨੂੰ ਪੁਰਾਣੇ ਸੰਸਕਰਣ ਨਾਲ ਬਦਲਿਆ ਜਾਵੇਗਾ।"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ਪੁਨਰ ਸਥਾਪਿਤ ਕਰੋ"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "ਅਪਡੇਟ ਕਰੋ"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ਇਹ ਫਾਈਲ ਸਥਾਪਿਤ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ ਰਿਹਾ। ਫਾਈਲ ਦਾ ਸਰੂਪ ਅਯੋਗ ਹੈ।"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "ਇਜਾਜ਼ਤ ਦਿਉ ਅਤੇ ਸਥਾਪਿਤ ਕਰੋ"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ਡਾਉਨਲੋਡ ਕੀਤਾ ਗਿਆ ਸੰਸਕਰਣ:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ਸਥਾਪਿਤ ਕੀਤਾ ਗਿਆ ਸੰਸਕਰਣ:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Cancelar"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Aviso"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Solicitações permissão"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "Este aplicativo pode ser prejudicial e danificar o dispositivo ou dados."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "Esta versão já está instalada no dispositivo. Ela será reinstalada."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "Uma versão mais antiga já está instalada no dispositivo. Ela será atualizada."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "Uma versão mais recente já está instalada no dispositivo. Ela será substituída pela versão anterior."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Reinstalar"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Atualizar"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Não é possível instalar este arquivo. O formato é inválido."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Permitir e instalar"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Versão baixada:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Versão instalada:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "අවලංගු කරන්න"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "අනතුරු ඇඟවීම"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "අවසර ඉල්ලීම්"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "මෙම යෙදුම හානිකර විය හැකි අතර ඔබගේ උපාංගය හෝ දත්ත හානි කළ හැක."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "මෙම අනුවාදය දැනටමත් ඔබගේ උපාංගය මත ස්ථාපනය කර ඇත. එය යළි ස්ථාපනය වනු ඇත."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "ඔබගේ උපාංගය මත දැනටමත් පැරණි අනුවාදයක් ස්ථාපනය කර ඇත. එය යාවත්කාලීන වනු ඇත."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "ඔබගේ උපාංගය මත දැනටමත් නව අනුවාදයක් ස්ථාපනය කර ඇත. එය පැරණි අනුවාදය සමගින් ප්රතිස්ථාපනය වනු ඇත."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "යළි ස්ථාපනය කරන්න"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "යාවත්කාලය"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "මෙම ගොනුව විවෘත කළ නොහැක. හැඩතලය අවලංගුය."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "ඉඩ දෙන්න සහ ස්ථාපනය කරන්න"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "බාගත් අනුවාදය:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ස්ථාපිත අනුවාදය:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "ரத்து"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "எச்சரிக்கை"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "அனுமதி கோரிக்கைகள்"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "இப்பயன்பாடு தீங்குவிளைவிக்கக்கூடும் என்பதுடன் உங்கள் சாதனத்தை அல்லது தரவை சேதப்படுத்தக்கூடும்."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "உங்கள் சாதனத்தில் ஏற்கனவே இப்பதிப்பு நிறுவப்பட்டுள்ளது. இது மீண்டும் நிறுவப்படும்."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "உங்கள் சாதனத்தில் ஏற்கனவே பழைய பதிப்பு நிறுவப்பட்டுள்ளது. அது புதுப்பிக்கப்படும்."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "உங்கள் சாதனத்தில் ஏற்கனவே புதிய பதிப்பு நிறுவப்பட்டுள்ளது. அது பழைய பதிப்பிற்கு மாற்றப்படும்."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "மீண்டும் நிறுவுக"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "புதுப்பி"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "இக்கோப்பினை நிறுவ இயலவில்லை. வடிவம் செல்லுபடியாகாதது."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "அனுமதித்து, நிறுவுக"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "பதிவிறக்கிய பதிப்பு:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "நிறுவிய பதிப்பு:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "రద్దు"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "హెచ్చరిక"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "అనుమతి అభ్యర్థనలు"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "ఈ అప్లికేషన్ హానికరమైనది కావచ్చు మరియు మీ పరికరానికి లేదా డేటాకి నష్టం కలిగించవచ్చు."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "మీ పరికరంలో ఇప్పటికే ఈ వెర్షన్ ఇన్స్టాల్ చేయబడింది. ఇది మళ్లీ ఇన్స్టాల్ చేయబడుతుంది."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "మీ పరికరంలో ఇప్పటికే పాత వెర్షన్ ఇన్స్టాల్ చేయబడింది. ఇది అప్డేట్ చేయబడుతుంది."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "మీ పరికరంలో ఇప్పటికే కొత్త వెర్షన్ ఇన్స్టాల్ చేయబడింది. ఇది పాత వెర్షన్తో భర్తీ చేయబడుతుంది."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "మళ్లీ ఇన్స్టాల్ చేయి"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "అప్డేట్"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ఈ ఫైల్ని ఇన్స్టాల్ చేయడం సాధ్యం కాదు. ఫార్మాట్ చెల్లదు."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "అనుమతించండి మరియు ఇన్స్టాల్ చేయండి"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "డౌన్లోడ్ చేసిన వెర్షన్:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "ఇన్స్టాల్ చేసిన వెర్షన్:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "ยกเลิก"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "เตือน"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "คำขออนุญาต"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "แอพพลิเคชั่นนี้ อาจเป็นอันตรายต่ออุปกรณ์ หรือข้อมูลของคุณ"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "อุปกรณ์ของคุณติดตั้งเวอร์ชั่นนี้ไว้แล้ว ซึ่งจะได้รับการติดตั้งใหม่"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "อุปกรณ์ของคุณ ติดตั้งเวอร์ชั่นเดิมไว้แล้ว ซึ่งจะได้รับการอัพเดท"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "อุปกรณ์ของคุณติดตั้งเวอร์ชั่นใหม่ไว้แล้ว ซึ่งจะถูกแทนที่ด้วยเวอร์ชั่นเดิม"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "ติดตั้งใหม่"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "อัพเดท"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "ไม่สามารถติดตั้งไฟล์นี้ได้ เนื่องจากรูปแบบไม่ถูกต้อง"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "อนุญาตและติดตั้ง"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "เวอร์ชั่นที่ดาวน์โหลด:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "เวอร์ชั่นที่ติดตั้ง:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Kanselahin"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "May Babala"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Kahilingan sa pahintulot"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "Maaaring nakakahamak ang application na ito at maaari itong makasira sa iyong device o data."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "Naka-install na ang bersyong ito sa iyong device. Ire-reinstall ito."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "May naka-install nang mas lumang bersyon sa iyong device. Maa-update ito."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "May naka-install nang mas bagong bersyon sa iyong device. Papalitan ito ng mas lumang bersyon."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "I-reinstall"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Update"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Hindi ma-install ang file na ito. Di-wasto ang format."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Payagan at i-install"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Na-download na bersyon:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Naka-install na bersyon:"
+
--- /dev/null
+#!/bin/sh
+
+PACKAGE=app-selector
+SRCROOT=..
+POTFILES=POTFILES.in
+
+#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW
+ALL_LINGUAS="en_US en_GB ja ko zh_CN"
+
+XGETTEXT=/usr/bin/xgettext
+MSGMERGE=/usr/bin/msgmerge
+
+echo -n "Make ${PACKAGE}.pot "
+if [ ! -e $POTFILES ] ; then
+ echo "$POTFILES not found"
+ exit 1
+fi
+
+$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \
+ --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES
+if [ $? -ne 0 ]; then
+ echo "xgettext error"
+ exit 1
+fi
+
+if [ ! -f ${PACKAGE}.po ]; then
+ echo "No such file: ${PACKAGE}.po"
+ exit 1
+fi
+
+rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot
+echo "done"
+
+for LANG in $ALL_LINGUAS; do
+ echo "$LANG : "
+
+ if [ ! -e $LANG.po ] ; then
+ sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po
+ echo "${LANG}.po created"
+ else
+ if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then
+ if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then
+ rm -f ${LANG}.new.po
+ else
+ if mv -f ${LANG}.new.po ${LANG}.po; then
+ echo ""
+ else
+ echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2
+ rm -f ${LANG}.new.po
+ exit 1
+ fi
+ fi
+ else
+ echo "msgmerge for $LANG failed!"
+ rm -f ${LANG}.new.po
+ fi
+ fi
+ echo ""
+done
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "منسوخ کریں"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "خطرہ"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "اجازت کی درخواستیں"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "یہ ایپلیکیشن نقصان دہ ہوسکتی ہے اور آپ کے آلہ یا ڈیٹا کا نقصان کرسکتی ہے"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "یہ ورژن آپ کے آلہ پر پہلے سے نصب ہے۔ یہ پھر نصب کیا جائے گا۔"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "آپ کے آلہ پر ایک قدیم تر ورژن پہلے سے نصب ہے۔ اس کی تازہ کاری کی جائے گی۔"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "آپ کے آلہ پر ایک جدید تر ورژن پہلے سے نصب ہے۔ اس کو قدیم ورژن سے تبدیل کیا جائے گا۔"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "پھر نصب کریں"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "تازہ کاری"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "یہ فائل نصب کرنے سے قاصر۔ یہ وضع غیرمجاز ہے۔"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "اجازت دیں اور نصب کریں"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "ڈاؤن لوڈ کردہ ورژن:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "نصب کردہ ورژن:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "Hủy bỏ"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "Cảnh báo"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "Yêu cầu cấp quyền"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "Ứng dụng này có thể có hại và gây hư hỏng cho thiết bị và dữ liệu của bạn."
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "Phiên bản này đã được cài đặt trên thiết bị của bạn. Sẽ được gỡ cài đặt."
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "Đã có phiên bản cũ hơn cài đặt trên thiết bị của bạn. Phiên bản đó sẽ được cập nhật."
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "Đã có phiên bản mới hơn cài đặt trên thiết bị của bạn. Phiên bản đó sẽ được thay bằng phiên bản cũ hơn."
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "Cài đặt lại"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "Cập nhật"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "Không thể cài đặt file này. Định dạng không hợp lệ."
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "Cho phép và cài đặt"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "Phiên bản đã tải về:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "Phiên bản đã cài đặt:"
+
--- /dev/null
+msgid "IDS_360V_BUTTON_CANCEL_ABB"
+msgstr "取消"
+
+msgid "IDS_APINST_HEADER_WARNING"
+msgstr "警告"
+
+msgid "IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"
+msgstr "许可请求"
+
+msgid "IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"
+msgstr "该应用程序可能有害并损坏您的设备或数据。"
+
+msgid "IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"
+msgstr "您的设备上已安装有该版本。其将被重新安装。"
+
+msgid "IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"
+msgstr "您的设备上已安装有较旧的版本。其将被更新。"
+
+msgid "IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"
+msgstr "您的设备上已安装较新的版本。其将替换为较旧的版本。"
+
+msgid "IDS_APINST_BUTTON_REINSTALL"
+msgstr "重新安装"
+
+msgid "IDS_APINST_BUTTON_UPDATE"
+msgstr "更新"
+
+msgid "IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"
+msgstr "无法安装该文件。格式无效。"
+
+msgid "IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"
+msgstr "允许并安装"
+
+msgid "IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"
+msgstr "已下载版本:"
+
+msgid "IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"
+msgstr "已安装版本:"
+
--- /dev/null
+/*
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <app.h>
+#include <dlog.h>
+#include <bundle.h>
+#include <Ecore_X.h>
+#include <Elementary.h>
+#include <efl_assist.h>
+#include <Evas.h>
+#include <utilX.h>
+#include <glib.h>
+
+#include <privilege_info.h>
+#include <package-manager.h>
+#include <package-manager-types.h>
+
+#include "installer.h"
+#include "installer_package_manager.h"
+#include "installer_util.h"
+
+#define KEY_MIME_CONTENT "__AUL_MIME_CONTENT__"
+#define KEY_MIME_CONTENT_NEW "__APP_SVC_URI__"
+
+#define LOCALE_FILE_NAME "org.tizen.installer"
+#define LOCALEDIR "/usr/apps/org.tizen.installer/res/locale"
+
+#define POP_MSG_SIZE 512
+
+typedef struct _appdata
+{
+ char *file_path;
+ char *extension;
+ int win_w;
+ int win_h;
+ Evas *evas;
+ Evas_Object *win;
+ Evas_Object *layout;
+ Evas_Object *conform;
+ Evas_Object *nf;
+ package_manager_pkg_detail_info_t *install_pkginfo;
+} appdata;
+
+typedef struct _item_data
+{
+ bool is_selected;
+ char *privilege;
+} item_data;
+
+struct text_part {
+ char *part;
+ char *msgid;
+};
+
+struct text_part main_txt[] =
+{
+ {"txt_title", N_("Installer"),},
+ {"txt_mesg", N_("install"),},
+};
+
+int create_base_gui(appdata *ad);
+int create_popup_base_gui(appdata *ad);
+static void _create_reinstall_popup(appdata *ad, const char* btn_str, const char* detail);
+static void _create_error_popup(appdata *ad);
+
+package_manager_pkg_detail_info_t *g_package_info = NULL;
+
+
+
+static char *_gl_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ LOGD("%s part(%s)", __func__, part);
+ if (!strcmp(part, "elm.text.main.left.top"))
+ {
+ char *name = NULL;
+ item_data *item = (item_data *)data;
+
+ privilege_info_get_privilege_display_name(item->privilege, &name);
+ return name;
+ }
+ else if (!strcmp(part, "elm.text.sub.left.bottom"))
+ {
+ char *description = NULL;
+ item_data *item = (item_data *)data;
+
+ privilege_info_get_privilege_description(item->privilege, &description);
+ return description;
+ }
+ else if (!strcmp(part, "elm.text.multiline"))
+ {
+ return strdup((char *)data);
+ }
+
+ return NULL;
+}
+
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ LOGD("%s part(%s)", __func__, part);
+ if (!strcmp(part, "elm.text.multiline"))
+ {
+ if ((int)data == 0)
+ {
+ return strdup(_("IDS_APINST_BODY_THIS_APPLICATION_MAY_BE_HARMFUL_AND_DAMAGE_YOUR_DEVICE_OR_DATA"));
+ }
+
+ }
+ return NULL;
+}
+
+static char *_gl_group_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ LOGD("%s part(%s)", __func__, part);
+ if (!strcmp(part, "elm.text.multiline"))
+ {
+ if ((int)data == 0)
+ {
+ return strdup(_("IDS_APINST_HEADER_WARNING"));
+ }
+ else if ((int)data == 1)
+ {
+ return strdup(_("IDS_APINST_HEADER_PERMISSION_REQUESTS_ABB"));
+ }
+ }
+ return NULL;
+}
+
+static void _gl_exp_ndepth(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *it;
+ Elm_Object_Item *parent = event_info;
+ Evas_Object *gl = elm_object_item_widget_get(parent);
+
+ char content[1024] = {0,};
+ char *name = NULL, *description = NULL;
+ int res = 0;
+ item_data *item = (item_data *)elm_object_item_data_get(parent);
+
+ if (item == NULL)
+ return;
+
+ LOGD("%s is_selected(%d)", __func__, item->is_selected);
+
+ if (item->is_selected)
+ {
+ item->is_selected = false;
+ elm_genlist_item_subitems_clear(event_info);
+ return;
+ }
+
+ res = privilege_info_get_privilege_display_name(item->privilege, &name);
+ if (res < 0)
+ {
+ LOGE("%s privilege_info_get_privilege_display_name() failed. (privilege: %s)", __func__, item->privilege);
+ }
+
+ res = privilege_info_get_privilege_description(item->privilege, &description);
+ if (res < 0)
+ {
+ LOGE("%s privilege_info_get_privilege_description() failed. (privilege: %s)", __func__, item->privilege);
+ }
+ snprintf(content, sizeof(content), "%s<br><br>%s", name, description);
+
+ Elm_Genlist_Item_Class *itc1;
+ itc1 = elm_genlist_item_class_new();
+ if (itc1 == NULL) {
+ LOGE("out of memory");
+ if (name)
+ free(name);
+ if (description)
+ free(description);
+
+ return;
+ }
+
+ itc1->item_style = "multiline_sub";
+ itc1->func.text_get = _gl_label_get;
+
+ it = elm_genlist_item_append(gl, itc1, content, parent, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ item->is_selected = true;
+ elm_genlist_item_class_free(itc1);
+
+ if (name)
+ free(name);
+ if (description)
+ free(description);
+}
+
+
+void _region_changed(app_event_info_h event_info, void* user_data)
+{
+ LOGD("%s", __func__);
+}
+
+void update_ts(Evas_Object *eo, struct text_part *tp, int size)
+{
+ LOGD("%s", __func__);
+ int i;
+
+ if (eo == NULL || tp == NULL || size < 0) {
+ return;
+ }
+
+ for (i = 0; i < size; i++) {
+ if (tp[i].part && tp[i].msgid) {
+ edje_object_part_text_set(eo, tp[i].part, _(tp[i].msgid));
+ }
+ }
+ return;
+}
+
+void _lang_changed(app_event_info_h event_info, void* user_data)
+{
+ LOGD("%s", __func__);
+ appdata* ad = user_data;
+
+ if (ad->layout == NULL) {
+ return;
+ }
+
+ update_ts(elm_layout_edje_get(ad->layout), main_txt, sizeof(main_txt)/sizeof(main_txt[0]));
+ return;
+}
+
+void _orient_changed(app_event_info_h event_info, void* user_data)
+{
+ LOGD("%s", __func__);
+ appdata* ap = (appdata*)user_data;
+ app_device_orientation_e orientation = app_get_device_orientation();
+
+ int degree = 0;
+
+ switch(orientation)
+ {
+ case APP_DEVICE_ORIENTATION_0:
+ {
+ degree = 0;
+ break;
+ }
+ case APP_DEVICE_ORIENTATION_90:
+ {
+ degree = 90;
+ break;
+ }
+ case APP_DEVICE_ORIENTATION_180:
+ {
+ degree = 180;
+ break;
+ }
+ case APP_DEVICE_ORIENTATION_270:
+ {
+ degree = 270;
+ break;
+ }
+ }
+
+ if (ap->win != NULL)
+ {
+ elm_win_rotation_with_resize_set(ap->win, degree);
+ }
+ return;
+}
+
+bool _keydown_cb(void *data, int type, void *event)
+{
+ LOGD("%s",__func__ );
+ Ecore_Event_Key* ev = event;
+ if (!strcmp(ev->keyname, KEY_END)) {
+ ui_app_exit();
+ }
+ return true;
+}
+
+void _main_quit_cb(void* user_data, Evas_Object* obj, void *event_info)
+{
+ LOGD("%s", __func__);
+ ui_app_exit();
+}
+
+void _main_quit_signal_cb(void* data, Evas_Object* obj, const char *emission, const char *source)
+{
+ LOGD("%s", __func__);
+ ui_app_exit();
+}
+
+void _reinstall_cb(void* user_data, Evas_Object* obj, void *event_info)
+{
+ LOGD("%s", __func__);
+ int res = 0;
+ appdata *ad = NULL;
+
+ if (!user_data) {
+ LOGE("user_data is NULL.");
+ return;
+ }
+ ad = (appdata*)user_data;
+
+ res = create_base_gui(ad);
+ if (res < 0)
+ {
+ LOGE("%s create_base_gui() failed.(%d)", __func__, res);
+ }
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,(Ecore_Event_Handler_Cb)_keydown_cb, NULL); // Control back key
+}
+
+static void _create_reinstall_popup(appdata *ad, const char* btn_str, const char* detail)
+{
+ Evas_Object *popup;
+ Evas_Object *btn;
+ Evas_Object *ly = ad->win;
+
+ /* popup */
+ popup = elm_popup_add(ly);
+ ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(popup, detail);
+
+ /* Cancel button */
+ btn = elm_button_add(popup);
+ elm_object_style_set(btn, "popup");
+ elm_object_text_set(btn, _("IDS_360V_BUTTON_CANCEL_ABB"));
+ ea_theme_object_color_replace(btn, "W011", "W0112");
+ elm_object_part_content_set(popup, "button1", btn);
+ evas_object_smart_callback_add(btn, "clicked", _main_quit_cb, ad);
+
+ /* Reinstall button */
+ btn = elm_button_add(popup);
+ elm_object_style_set(btn, "popup");
+ elm_object_text_set(btn, btn_str);
+ ea_theme_object_color_replace(btn, "W011", "W0111");
+ elm_object_part_content_set(popup, "button2", btn);
+ evas_object_smart_callback_add(btn, "clicked", _reinstall_cb, ad);
+
+ evas_object_show(popup);
+}
+
+
+static void _create_error_popup(appdata *ad)
+{
+ Evas_Object *popup;
+ Evas_Object *btn;
+ Evas_Object *win = ad->win;
+
+ /* popup */
+ popup = elm_popup_add(win);
+ ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+ elm_object_part_text_set(popup, "title,text", "Error.");
+ elm_object_text_set(popup, _("IDS_APINST_POP_UNABLE_TO_INSTALL_THIS_FILE_THE_FORMAT_IS_INVALID"));
+
+ /* ok button */
+ btn = elm_button_add(popup);
+ elm_object_style_set(btn, "popup");
+ elm_object_text_set(btn, "OK");
+ elm_object_part_content_set(popup, "button1", btn);
+ evas_object_smart_callback_add(btn, "clicked", _main_quit_cb, ad);
+ evas_object_show(popup);
+}
+
+
+static void
+win_delete_request_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ /* To make your application go to background,
+ Call the elm_win_lower() instead
+ Evas_Object *win = (Evas_Object *) data;
+ elm_win_lower(win); */
+ ui_app_exit();
+}
+
+
+static int __parse_argv(int argc, char **argv, char **file_path)
+{
+ LOGD("%s", __func__);
+ static bundle *b = NULL;
+ if (b)
+ {
+ bundle_free(b);
+ }
+
+ b = bundle_import_from_argv(argc, argv);
+ if (b == NULL)
+ {
+ LOGD("%s bundle for bundle_import_from_argv is NULL", __func__);
+ }
+
+ errno = 0;
+ if(bundle_get_val(b, KEY_MIME_CONTENT_NEW))
+ {
+ *file_path = (char *)bundle_get_val(b, KEY_MIME_CONTENT_NEW);
+ }
+ else
+ {
+ *file_path = (char *)bundle_get_val(b, KEY_MIME_CONTENT);
+ }
+ if (errno)
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+static void _button_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ appdata *ad = NULL;
+ ad = (appdata*)data;
+
+ SECURE_LOGD("pkg_name(%s), pkgid(%s) label(%s)",
+ ad->install_pkginfo->pkg_name,
+ ad->install_pkginfo->pkgid,
+ ad->install_pkginfo->label
+ );
+
+ int res = launch_install_service(ad->file_path, ad->install_pkginfo);
+ if (res < 0)
+ {
+ LOGE("%s launch_install_service() failed.", __func__);
+ }
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+ if (!ei) return;
+ Eina_Bool expanded = EINA_FALSE;
+
+ elm_genlist_item_selected_set(ei, EINA_FALSE);
+
+ expanded = elm_genlist_item_expanded_get(ei);
+ elm_genlist_item_expanded_set(ei, !expanded);
+}
+
+static Evas_Object *_gl_btn_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ LOGD("%s part(%s)", __func__, part);
+ if (!strcmp(part, "elm.icon.entry"))
+ {
+ Evas_Object *btn = elm_button_add(obj);
+ elm_object_style_set(btn, "popup");
+ elm_object_text_set(btn, _("IDS_APINST_BUTTON_ALLOW_AND_INSTALL_ABB"));
+ evas_object_propagate_events_set(btn, EINA_FALSE);
+ evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1);
+ evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_smart_callback_add(btn, "clicked", _button_clicked_cb, data);
+
+ return btn;
+ }
+ return NULL;
+}
+
+
+static Evas_Object *_create_content(appdata *data)
+{
+ appdata *ad = NULL;
+ ad = data;
+
+ Evas_Object *genlist;
+ Evas_Object *nf = ad->nf;
+ Elm_Object_Item *git;
+ item_data *item = NULL;
+
+ Elm_Genlist_Item_Class *itc, *itc_group, *itc_sep_empty, *itc_expandable_box, *itc_btn_install;
+
+ itc = elm_genlist_item_class_new();
+ if (itc == NULL)
+ return NULL;
+
+ itc_group = elm_genlist_item_class_new();
+ if (itc_group == NULL) {
+ elm_genlist_item_class_free(itc);
+ return NULL;
+ }
+
+ itc_sep_empty = elm_genlist_item_class_new();
+ if (itc_sep_empty == NULL) {
+ elm_genlist_item_class_free(itc_group);
+ elm_genlist_item_class_free(itc);
+ return NULL;
+ }
+
+ itc_expandable_box = elm_genlist_item_class_new();
+ if (itc_expandable_box == NULL) {
+ elm_genlist_item_class_free(itc_sep_empty);
+ elm_genlist_item_class_free(itc_group);
+ elm_genlist_item_class_free(itc);
+ return NULL;
+ }
+
+ itc_btn_install = elm_genlist_item_class_new();
+ if (itc_btn_install == NULL) {
+ elm_genlist_item_class_free(itc_expandable_box);
+ elm_genlist_item_class_free(itc_sep_empty);
+ elm_genlist_item_class_free(itc_group);
+ elm_genlist_item_class_free(itc);
+ return NULL;
+ }
+
+ itc_group->item_style = "multiline_main";
+ itc_group->func.text_get = _gl_group_text_get;
+
+ itc->item_style = "multiline_sub";
+ itc->func.text_get = _gl_text_get;
+
+ itc_sep_empty->item_style = "empty_area";
+
+ itc_expandable_box->item_style = "2line.top";
+ itc_expandable_box->func.text_get = _gl_label_get;
+
+ itc_btn_install->item_style = "entry";
+ itc_btn_install->func.content_get = _gl_btn_text_get;
+
+ genlist = elm_genlist_add(nf);
+ elm_genlist_realization_mode_set(genlist, EINA_TRUE);
+ // COMPRESS MODE
+ // If multiline text (multiline entry or multiline textblock or sliding mode)
+ // is used, use compress mode for compressing width to fit the viewport width.
+ // So genlist can calculate item's height correctly.
+ elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+ printf("Compress mode enabled\n");
+
+
+ // In dialogue group ***********************************
+ git = elm_genlist_item_append(genlist, itc_group, (void *)0, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ git = elm_genlist_item_append(genlist, itc, (void *)0, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ // Expandable box in dialogue group
+ if (g_list_length(ad->install_pkginfo->privilege_list) > 0)
+ {
+ int i = 0;
+
+ git = elm_genlist_item_append(genlist, itc_group, (void *)1, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ for (i=0; i< g_list_length(ad->install_pkginfo->privilege_list); i++)
+ {
+ // - Expandable box
+ item = calloc(sizeof(item_data), 1);
+ if (item == NULL) {
+ LOGE("out of memory");
+ continue;
+ }
+
+ item->is_selected = false;
+ item->privilege = g_list_nth_data(ad->install_pkginfo->privilege_list, i);
+
+ elm_genlist_item_append(genlist, itc_expandable_box, item
+ , NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL
+ );
+ }
+ evas_object_smart_callback_add(genlist, "selected", _gl_exp_ndepth, genlist);
+ }
+
+ // Install button in dialogue group
+ elm_genlist_item_append(genlist, itc_btn_install, ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+
+ elm_genlist_item_class_free(itc);
+ elm_genlist_item_class_free(itc_group);
+ elm_genlist_item_class_free(itc_sep_empty);
+ elm_genlist_item_class_free(itc_expandable_box);
+ elm_genlist_item_class_free(itc_btn_install);
+
+ return genlist;
+}
+
+static void
+create_view(appdata *ad)
+{
+ Evas_Object *nf = ad->nf;
+ Evas_Object *content, *ic;
+ Elm_Object_Item *navi_it;
+ char buf[PATH_MAX] = {0,};
+ package_manager_pkg_detail_info_t *package_info = (package_manager_pkg_detail_info_t *)ad->install_pkginfo;
+
+ content = _create_content(ad);
+
+ //Push a new item
+ navi_it = elm_naviframe_item_push(nf, package_info->label, NULL, NULL, content, NULL);
+
+ //Title Icon
+ ic = elm_image_add(nf);
+ snprintf(buf, sizeof(buf), "%s", ICON_PATH);
+ elm_image_file_set(ic, buf, NULL);
+ evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+ elm_object_item_part_content_set(navi_it, "elm.swallow.icon", ic);
+}
+
+
+static Evas_Object *__create_win(const char *name)
+{
+ Evas_Object *eo;
+ int w;
+ int h;
+
+ eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (eo) {
+ elm_win_title_set(eo, name);
+ elm_win_borderless_set(eo, EINA_TRUE);
+
+ elm_win_alpha_set(eo, EINA_TRUE);
+
+ evas_object_smart_callback_add(eo, "delete,request", win_delete_request_cb, NULL);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(eo, w, h);
+
+ ea_screen_reader_support_set(eo, EINA_TRUE);
+ }
+
+ return eo;
+}
+
+static Evas_Object *__create_layout_main(Evas_Object * parent)
+{
+ Evas_Object *layout;
+
+ if (!parent)
+ return NULL;
+
+ layout = elm_layout_add(parent);
+ if (!layout)
+ return NULL;
+
+ elm_layout_theme_set(layout, "layout", "application", "default");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ edje_object_signal_emit(elm_layout_edje_get(layout), "elm,state,show,content", "elm");
+
+ evas_object_show(layout);
+
+ return layout;
+}
+
+int create_popup_base_gui(appdata *ad)
+{
+ Evas_Object *win;
+ Evas_Object *ly;
+
+ /* create window */
+ win = __create_win(PACKAGE);
+ if (win == NULL)
+ return -1;
+ ad->win = win;
+
+ /* Base Layout */
+ ly = __create_layout_main(ad->win);
+ if (!ly)
+ return -1;
+
+ ad->layout = ly;
+
+ edje_object_signal_emit(elm_layout_edje_get(ad->layout), "elm,bg,show,transparent", "elm");
+
+ if (elm_win_wm_rotation_supported_get(ad->win))
+ {
+ int rots[4] = { 0, 90, 180, 270 };
+ elm_win_wm_rotation_available_rotations_set(ad->win, (const int*)(&rots), 4);
+ }
+ else
+ {
+ LOGE("%s win rotation no supported", __func__);
+ return -1;
+ }
+
+ evas_object_show(win);
+
+ return 0;
+}
+
+
+int create_base_gui(appdata *ad)
+{
+ /*
+ * Widget Tree
+ * Window
+ * - conform
+ * - layout main
+ * - naviframe */
+
+ /* Window */
+ ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
+ elm_win_wm_desktop_layout_support_set(ad->win, EINA_TRUE);
+ elm_win_conformant_set(ad->win, EINA_TRUE);
+ elm_win_autodel_set(ad->win, EINA_TRUE);
+
+ if (elm_win_wm_rotation_supported_get(ad->win)) {
+ int rots[4] = { 0, 90, 180, 270 };
+ elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
+ }
+
+ evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);
+
+ /* Conformant */
+ ad->conform = elm_conformant_add(ad->win);
+ evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(ad->win, ad->conform);
+ evas_object_show(ad->conform);
+
+ /* Base Layout */
+ ad->layout = elm_layout_add(ad->conform);
+ evas_object_size_hint_weight_set(ad->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_layout_theme_set(ad->layout, "layout", "application", "default");
+ evas_object_show(ad->layout);
+ elm_object_content_set(ad->conform, ad->layout);
+
+ /* Naviframe */
+ ad->nf = elm_naviframe_add(ad->layout);
+ elm_object_part_content_set(ad->layout, "elm.swallow.content", ad->nf);
+
+ /* Indicator */
+ elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
+
+ create_view(ad);
+
+ /* Show window after base gui is set up */
+ evas_object_show(ad->win);
+
+ ea_object_event_callback_add(ad->nf, EA_CALLBACK_BACK, ea_naviframe_back_cb, NULL);
+ ea_object_event_callback_add(ad->nf, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
+
+ return 0;
+}
+
+
+
+package_manager_pkg_detail_info_t* _get_packageInfo(char *file_path)
+{
+ package_manager_pkg_detail_info_t *package_info = NULL;
+
+ if (file_path == NULL)
+ {
+ LOGE("%s file_path is NULL.", __func__);
+ return NULL;
+ }
+
+ package_info = (package_manager_pkg_detail_info_t*)get_package_info_from_file(file_path);
+ if (package_info == NULL)
+ {
+ LOGE("%s package_info is NULL", __func__);
+ return NULL;
+ }
+
+ SECURE_LOGD("%s filepath(%s) package(%s) pkgid(%s) version(%s) type(%s) description(%s), label(%s), icon_size(%d), icon_buf(%s)"
+ , __func__
+ , file_path
+ , package_info->pkg_name
+ , package_info->pkgid
+ , package_info->version
+ , package_info->pkg_type
+ , package_info->pkg_description
+ , package_info->label
+ , package_info->icon_size
+ , package_info->icon_buf
+ );
+
+ return package_info;
+}
+
+static bool _app_create(void* user_data)
+{
+ LOGD("%s", __func__);
+ int res = 0;
+
+ appdata *ad = NULL;
+ char *bind = NULL;
+
+ bind = bindtextdomain(LOCALE_FILE_NAME, LOCALEDIR);
+ if (!bind)
+ {
+ LOGE("bindtextdomain failed.");
+ }
+ LOGD("LOCALE file name is %s", bind);
+
+ if (!user_data) {
+ LOGE("user_data is NULL.");
+ return false;
+ }
+ ad = (appdata*)user_data;
+
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,(Ecore_Event_Handler_Cb)_keydown_cb, NULL); // Control back key
+
+ // version check
+ // - popup
+ // - install
+ ad->install_pkginfo = _get_packageInfo(ad->file_path);
+ if (ad->install_pkginfo == NULL)
+ {
+ LOGE("%s _get_packageInfo() failed.", __func__);
+ create_popup_base_gui(ad);
+ _create_error_popup(ad);
+ }
+ else
+ {
+ if (is_valid_version(ad->install_pkginfo->version) < 0)
+ {
+ LOGE("%s is_valid_version() failed. Package version is invalid.", __func__);
+ res = create_popup_base_gui(ad);
+ _create_error_popup(ad);
+ }
+ else
+ {
+ if (is_package_installed(ad->install_pkginfo->pkgid))
+ {
+ res = create_popup_base_gui(ad);
+ if (res < 0)
+ {
+ LOGE("%s create_popup_base_gui() failed(%d).", __func__, res);
+ }
+
+ //Compare version
+ char *current_pkg_version = NULL;
+ char *temp = NULL;
+ res = get_package_version(ad->install_pkginfo->pkgid, ¤t_pkg_version);
+ if (res < 0)
+ {
+ LOGE("%s get_package_version() failed(%d).", __func__, res);
+ _create_error_popup(ad);
+ return true;
+ }
+
+ res = compare_version(current_pkg_version, ad->install_pkginfo->version);
+ if (res < 0)
+ {
+ LOGE("%s compare_version() failed.", __func__);
+ _create_error_popup(ad);
+ free(current_pkg_version);
+ return true;
+ }
+ LOGI("compare_version() = %d (old:%s, new:%s)", res, current_pkg_version, ad->install_pkginfo->version);
+
+ if (res == VERSION_SAME)
+ {
+ LOGI("VERSION_SAME");
+ char popup_msg[POP_MSG_SIZE] = {0, };
+ char *inst_ver = NULL;
+ char *dwnl_ver = NULL;
+ temp = strdup(_("IDS_APINST_POP_THIS_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REINSTALLED"));
+ if (!temp)
+ {
+ LOGE("strdup has failed");
+ }
+
+ inst_ver = strdup(_("IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"));
+ if (!inst_ver)
+ {
+ LOGE("inst_ver string is null");
+ }
+ dwnl_ver = strdup(_("IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"));
+ if (!dwnl_ver)
+ {
+ LOGE("downloaded version string is null");
+ }
+ sprintf(popup_msg, "%s<br><br> %s %s<br> %s %s", temp, inst_ver, current_pkg_version, dwnl_ver, ad->install_pkginfo->version);
+ _create_reinstall_popup(ad, _("IDS_APINST_BUTTON_REINSTALL"), popup_msg);
+
+ if (temp)
+ free(temp);
+ if (dwnl_ver)
+ free(dwnl_ver);
+ if (inst_ver)
+ free(inst_ver);
+ }
+ else if (res == VERSION_NEW)
+ {
+ LOGI("VERSION_NEW");
+ char popup_msg[POP_MSG_SIZE] = {0, };
+ char *inst_ver = NULL;
+ char *dwnl_ver = NULL;
+ temp = strdup(_("IDS_APINST_POP_AN_OLDER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_UPDATED"));
+ if (!temp)
+ {
+ LOGE("strdup has failed");
+ }
+
+ inst_ver = strdup(_("IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"));
+ if (!inst_ver)
+ {
+ LOGE("inst_ver string is null");
+ }
+ dwnl_ver = strdup(_("IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"));
+ if (!dwnl_ver)
+ {
+ LOGE("downloaded version string is null");
+ }
+ sprintf(popup_msg, "%s<br><br> %s %s<br> %s %s", temp, inst_ver, current_pkg_version, dwnl_ver, ad->install_pkginfo->version);
+ _create_reinstall_popup(ad, _("IDS_APINST_BUTTON_UPDATE"), popup_msg);
+
+ if (temp)
+ free(temp);
+ if (dwnl_ver)
+ free(dwnl_ver);
+ if (inst_ver)
+ free(inst_ver);
+ }
+ else if (res == VERSION_OLD)
+ {
+ LOGI("VERSION_OLD");
+ char popup_msg[POP_MSG_SIZE] = {0, };
+ char *inst_ver = NULL;
+ char *dwnl_ver = NULL;
+ temp = strdup(_("IDS_APINST_POP_A_NEWER_VERSION_IS_ALREADY_INSTALLED_ON_YOUR_DEVICE_IT_WILL_BE_REPLACED_WITH_THE_OLDER_VERSION"));
+ if (!temp)
+ {
+ LOGE("strdup has failed");
+ }
+ inst_ver = strdup(_("IDS_APINST_BODY_INSTALLED_VERSION_C_ABB"));
+ if (!inst_ver)
+ {
+ LOGE("inst_ver string is null");
+ }
+ dwnl_ver = strdup(_("IDS_APINST_BODY_DOWNLOADED_VERSION_C_ABB"));
+ if (!dwnl_ver)
+ {
+ LOGE("downloaded version string is null");
+ }
+ sprintf(popup_msg, "%s<br><br> %s %s<br> %s %s", temp, inst_ver, current_pkg_version, dwnl_ver, ad->install_pkginfo->version);
+ _create_reinstall_popup(ad, _("IDS_APINST_BUTTON_REINSTALL"), popup_msg);
+
+ if (temp)
+ free(temp);
+ if (dwnl_ver)
+ free(dwnl_ver);
+ if (inst_ver)
+ free(inst_ver);
+ }
+
+ free(current_pkg_version);
+
+ }
+ else
+ {
+ LOGI("%s create_base_gui() called.", __func__);
+ res = create_base_gui(ad);
+ if (res < 0)
+ {
+ LOGE("%s create_base_gui() failed(%d).", __func__, res);
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+
+static void _app_pause(void* user_data)
+{
+ LOGD("%s", __func__);
+ ui_app_exit();
+}
+
+static void _app_resume(void* user_data)
+{
+ LOGD("%s", __func__);
+}
+
+static void _app_terminate(void* user_data)
+{
+ LOGD("%s", __func__);
+}
+
+
+int main(int argc, char* argv[])
+{
+ LOGD("Start installer main()");
+ appdata ad = {0,};
+ ui_app_lifecycle_callback_s event_callback = {0,};
+
+ app_event_handler_h lang_changed_handler;
+ app_event_handler_h orient_changed_handler;
+ app_event_handler_h region_changed_handler;
+
+ event_callback.create = _app_create;
+ event_callback.terminate = _app_terminate;
+ event_callback.pause = _app_pause;
+ event_callback.resume = _app_resume;
+
+ ui_app_add_event_handler(&lang_changed_handler, APP_EVENT_LANGUAGE_CHANGED, _lang_changed, &ad);
+ ui_app_add_event_handler(&orient_changed_handler, APP_EVENT_DEVICE_ORIENTATION_CHANGED, _orient_changed, &ad);
+ ui_app_add_event_handler(®ion_changed_handler, APP_EVENT_REGION_FORMAT_CHANGED, _region_changed, &ad);
+
+ char *file_path;
+ const char *extension;
+
+ if (__parse_argv(argc, argv, &file_path))
+ {
+ LOGE("%s Failed to parse argv!", __func__);
+ return -1;
+ }
+
+ if (strncmp(file_path, "file", 4) == 0)
+ {
+ ad.file_path = modify_file_path(file_path);
+ }
+ else
+ {
+ ad.file_path = file_path;
+ }
+
+ extension = get_file_extension(file_path);
+ ad.extension = (char*)extension;
+
+ SECURE_LOGI("%s install file_path(%s), extension(%s)", __func__, ad.file_path, ad.extension);
+
+ int ret = ui_app_main(argc, argv, &event_callback, &ad);
+ if (ret != APP_ERROR_NONE) {
+ LOGE("ui_app_main() is failed. err = %d", ret);
+ }
+
+ LOGD("End installer main()");
+ return ret;
+}
--- /dev/null
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <aul.h>
+#include <bundle.h>
+
+#include <pkgmgr-info.h>
+#include <package-manager.h>
+
+#include <appsvc.h>
+#include <notification.h>
+
+#include "installer_util.h"
+#include "installer_package_manager.h"
+
+#define KEY_PACKAGE_LABEL "__KEY_PACKAGE_LABEL__"
+#define KEY_PACKAGE_PATH "__KEY_PACKAGE_PATH__"
+#define KEY_PACKAGE_ICON_PATH "__KEY_PACKAGE_ICON_PATH__"
+
+
+pkgmgr_client *__pc;
+int __priv_id;
+
+
+bool is_package_installed(const char *pkgid)
+{
+ if (pkgid == NULL)
+ {
+ LOGE("%s pkgid is empty.", __func__);
+ }
+
+ int result = 0;
+ pkgmgrinfo_pkginfo_h pPackageInfoHandle = NULL;
+
+ result = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pPackageInfoHandle);
+ if (result != 0)
+ {
+ LOGD("%s pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", __func__, result, pkgid);
+ return false;
+ }
+
+ if (pPackageInfoHandle)
+ {
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
+ }
+
+ SECURE_LOGD("%s pkgid = [%s] is installed. ", __func__, pkgid);
+ return true;
+}
+
+int get_package_version(const char *pkgid, char **version)
+{
+ if (pkgid == NULL)
+ {
+ LOGE("%s pkgid is empty.", __func__);
+ return -1;
+ }
+
+ int result = 0;
+ char *ver_temp = NULL;
+ pkgmgrinfo_pkginfo_h handle = NULL;
+
+ result = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &handle);
+ if (result != 0)
+ return -1;
+
+ result = pkgmgrinfo_pkginfo_get_version(handle, &ver_temp);
+ if (result != 0)
+ {
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+ return -1;
+ }
+
+ *version = strdup(ver_temp);
+ return 0;
+}
+
+int launch_install_service(const char *file_path, const package_manager_pkg_detail_info_t *pkg_info)
+{
+ bundle *b = NULL;
+ b = bundle_create();
+ SECURE_LOGD("%s file_path(%s), label(%s), icon_path(%s)", __func__, file_path, pkg_info->label, pkg_info->icon_buf);
+
+ bundle_add(b, KEY_PACKAGE_PATH, file_path);
+ bundle_add(b, KEY_PACKAGE_LABEL, pkg_info->label);
+ bundle_add(b, KEY_PACKAGE_ICON_PATH, pkg_info->icon_buf);
+
+ if(!aul_app_is_running("org.tizen.installer-service"))
+ {
+ int res = aul_launch_app("org.tizen.installer-service", b);
+ if (res < 0)
+ {
+ LOGE("%s aul_launch_app() failed.(%d)", __func__, res);
+ }
+
+ ui_app_exit();
+ }
+
+ if (b)
+ {
+ bundle_free(b);
+ }
+
+ return 0;
+}
+
+
+package_manager_pkg_detail_info_t* get_package_info_from_file(const char *file_path)
+{
+ int ret = 0;
+
+ if (file_path == NULL)
+ {
+ LOGE("%s file_path is empty.", __func__);
+ return NULL;
+ }
+ LOGD("%s packagePath = [%s]", __func__, file_path);
+
+ ret = access(file_path, F_OK);
+ if (ret < 0)
+ {
+ switch (errno)
+ {
+ case ENOENT:
+ LOGE("%s access() failed. file_path is not existed. (%s)", __func__, file_path);
+ return NULL;
+
+ default:
+ LOGE("%s access() failed. path: %s errno: %d (%s)", __func__, file_path, errno, strerror(errno));
+ return NULL;
+ }
+ }
+
+ char *extension = NULL;
+ extension = get_file_extension(file_path);
+ SECURE_LOGD("%s pacagePath = [%s], extension = [%s]", __func__, file_path, extension);
+
+ package_manager_pkg_detail_info_t* pkg_info = NULL;
+ pkg_info = pkgmgr_client_check_pkginfo_from_file(file_path);
+
+ if (pkg_info == NULL)
+ {
+ LOGE("%s pkgmgr_client_check_pkginfo_from_file(%s) is failed.", __func__, file_path);
+ return NULL;
+ }
+
+ return pkg_info;
+}
--- /dev/null
+#include <errno.h>
+#include <dlog.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "installer_util.h"
+
+
+char * get_file_extension(const char *file_path)
+{
+ return strrchr(file_path, '.') + 1;
+}
+
+
+char * modify_file_path(const char *file_path)
+{
+ return strchr(file_path, '/') + 2;
+}
+
+int is_valid_version(const char* version)
+{
+ int major, minor, macro;
+
+ return extract_version(version, &major, &minor, ¯o);
+}
+
+int extract_version(const char* version, int* major, int* minor, int* macro)
+{
+ char* version_temp = NULL;
+ char* major_str = NULL;
+ char* minor_str = NULL;
+ char* macro_str = NULL;
+
+ version_temp = strdup(version);
+
+ major_str = strtok(version_temp, ".");
+ if (major_str == NULL)
+ {
+ LOGE("%s strtok() failed. major version is NULL.", __func__);
+ free(version_temp);
+ return -1;
+ }
+
+ minor_str = strtok(NULL, ".");
+ if (minor_str == NULL)
+ {
+ LOGE("%s strtok() failed. minor version is NULL.", __func__);
+ free(version_temp);
+ return -1;
+ }
+
+ *major = atoi(major_str);
+ *minor = atoi(minor_str);
+
+ macro_str = strtok(NULL, ".");
+ if (macro_str == NULL)
+ {
+ LOGI("%s strtok() failed. macro version is NULL.", __func__);
+ LOGI("%s version = [%s] -> major = [%d], minor = [%d]", __func__, version, *major, *minor);
+ }
+ else
+ {
+ *macro = atoi(macro_str);
+ LOGI("%s version = [%s] -> major = [%d], minor = [%d], macro = [%d]", __func__, version, *major, *minor, *macro);
+ }
+
+ free(version_temp);
+
+ return 0;
+}
+
+
+int compare_version(const char* old_version, const char* new_version)
+{
+ int res = 0;
+ int old_version_major = 0;
+ int old_version_minor = 0;
+ int old_version_macro = 0;
+ int new_version_major = 0;
+ int new_version_minor = 0;
+ int new_version_macro = 0;
+
+ res = extract_version(new_version, &new_version_major, &new_version_minor, &new_version_macro);
+ if (res < 0)
+ {
+ LOGE("%s extract_verison() failed.(%d)", __func__, res);
+ return VERSION_ERROR;
+ }
+
+ res = extract_version(old_version, &old_version_major, &old_version_minor, &old_version_macro);
+ if (res < 0)
+ {
+ LOGE("%s extract_verison() failed.(%d)", __func__, res);
+ return VERSION_ERROR;
+ }
+
+ LOGI("new[%d.%d.%d] old[%d.%d.%d]", new_version_major, new_version_minor, new_version_macro,
+ old_version_major, old_version_minor, old_version_macro);
+
+ if (new_version_major > old_version_major)
+ {
+ return VERSION_NEW;
+ }
+ else if (new_version_major < old_version_major)
+ {
+ return VERSION_OLD;
+ }
+
+ if (new_version_minor > old_version_minor)
+ {
+ return VERSION_NEW;
+ }
+ else if (new_version_minor < old_version_minor)
+ {
+ return VERSION_OLD;
+ }
+
+ if (new_version_macro > old_version_macro)
+ {
+ return VERSION_NEW;
+ }
+ else if (new_version_macro < old_version_macro)
+ {
+ return VERSION_OLD;
+ }
+
+ return VERSION_SAME;
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.installer" version="0.0.1" install-location="internal-only">
+ <label>Installer</label>
+ <author email="gs_.jung@samsung.com" href="www.samsung.com">Gyeongseok Jeong</author>
+ <description>Installer</description>
+ <ui-application
+ appid="org.tizen.installer"
+ exec="org.tizen.installer"
+ nodisplay="true" multiple="false" type="capp" taskmanage="false">
+ <icon>org.tizen.installer.png</icon>
+ <label>installer</label>
+ <application-service>
+ <operation name="http://tizen.org/appcontrol/operation/view"/>
+ <mime name="application/widget"/>
+ <mime name="application/vnd.wac.widget-sharing"/>
+ <mime name="application/x-rpm"/>
+ <mime name="application/x-redhat-package-manager"/>
+ <mime name="application/vnd.tizen.package"/>
+ </application-service>
+ <label xml:lang="en-us">Installer</label>
+ <label xml:lang="ko-kr">Installer</label>
+ </ui-application>
+ <service-application
+ component-type="svcapp" auto-restart="false" on-boot="false"
+ appid="org.tizen.installer-service"
+ exec="installer-service"
+ nodisplay="true" multiple="false" type="capp" taskmanage="false">
+ <label>installer-service</label>
+ <label xml:lang="en-us">Installer Service</label>
+ <label xml:lang="ko-kr">Installer Service</label>
+ </service-application>
+</manifest>