tizen 2.3.1 release tizen_2.3.1 submit/tizen_2.3.1/20150915.072811 tizen_2.3.1_release
authorjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 12:37:31 +0000 (21:37 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 12:37:31 +0000 (21:37 +0900)
56 files changed:
CMakeLists.txt [new file with mode: 0644]
LICENSE.APLv2 [new file with mode: 0755]
NOTICE [new file with mode: 0755]
include/installer.h [new file with mode: 0644]
include/installer_package_manager.h [new file with mode: 0644]
include/installer_util.h [new file with mode: 0644]
installer-service.manifest [new file with mode: 0755]
installer_service/CMakeLists.txt [new file with mode: 0755]
installer_service/LICENSE.APLv2 [new file with mode: 0755]
installer_service/NOTICE [new file with mode: 0755]
installer_service/include/installer-service.h [new file with mode: 0755]
installer_service/installer-service.rule [new file with mode: 0644]
installer_service/installer-service.xml [new file with mode: 0755]
installer_service/src/installer-service.c [new file with mode: 0755]
org.tizen.installer.edc [new file with mode: 0644]
org.tizen.installer.efl [new file with mode: 0644]
org.tizen.installer.manifest [new file with mode: 0755]
org.tizen.installer.png [new file with mode: 0644]
org.tizen.installer.xml [new file with mode: 0755]
packaging/org.tizen.installer.spec [new file with mode: 0644]
po/CMakeLists.txt [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/as.po [new file with mode: 0644]
po/bn.po [new file with mode: 0644]
po/en.po [new file with mode: 0644]
po/en_PH.po [new file with mode: 0644]
po/en_US.po [new file with mode: 0644]
po/es_US.po [new file with mode: 0644]
po/gu.po [new file with mode: 0644]
po/hi.po [new file with mode: 0644]
po/id.po [new file with mode: 0644]
po/km.po [new file with mode: 0644]
po/kn.po [new file with mode: 0644]
po/ko_KR.po [new file with mode: 0644]
po/lo.po [new file with mode: 0644]
po/ml.po [new file with mode: 0644]
po/mr.po [new file with mode: 0644]
po/ms.po [new file with mode: 0644]
po/my.po [new file with mode: 0644]
po/ne.po [new file with mode: 0644]
po/or.po [new file with mode: 0644]
po/pa.po [new file with mode: 0644]
po/pt_BR.po [new file with mode: 0644]
po/si.po [new file with mode: 0644]
po/ta.po [new file with mode: 0644]
po/te.po [new file with mode: 0644]
po/th.po [new file with mode: 0644]
po/tl.po [new file with mode: 0644]
po/update-po.sh [new file with mode: 0755]
po/ur.po [new file with mode: 0644]
po/vi.po [new file with mode: 0644]
po/zh_CN.po [new file with mode: 0644]
src/installer.c [new file with mode: 0644]
src/installer_package_manager.c [new file with mode: 0644]
src/installer_util.c [new file with mode: 0644]
tizen-manifest.xml [new file with mode: 0755]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..85417c4
--- /dev/null
@@ -0,0 +1,72 @@
+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)
diff --git a/LICENSE.APLv2 b/LICENSE.APLv2
new file mode 100755 (executable)
index 0000000..a06208b
--- /dev/null
@@ -0,0 +1,204 @@
+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.
+
diff --git a/NOTICE b/NOTICE
new file mode 100755 (executable)
index 0000000..49acec9
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+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.
diff --git a/include/installer.h b/include/installer.h
new file mode 100644 (file)
index 0000000..deebd71
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * 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
diff --git a/include/installer_package_manager.h b/include/installer_package_manager.h
new file mode 100644 (file)
index 0000000..2a1fbdc
--- /dev/null
@@ -0,0 +1,19 @@
+#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_
diff --git a/include/installer_util.h b/include/installer_util.h
new file mode 100644 (file)
index 0000000..27be29f
--- /dev/null
@@ -0,0 +1,32 @@
+#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_
diff --git a/installer-service.manifest b/installer-service.manifest
new file mode 100755 (executable)
index 0000000..aeda682
--- /dev/null
@@ -0,0 +1,9 @@
+<manifest>
+       <define>
+               <domain name="installer-service" />
+        <permit>
+         <smack permit="org.tizen.app-tray" type="rwx" />
+         <smack permit="e17" type="rwx" />
+        </permit>
+       </define>
+</manifest>
diff --git a/installer_service/CMakeLists.txt b/installer_service/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..892d38c
--- /dev/null
@@ -0,0 +1,32 @@
+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)
diff --git a/installer_service/LICENSE.APLv2 b/installer_service/LICENSE.APLv2
new file mode 100755 (executable)
index 0000000..9c13a9b
--- /dev/null
@@ -0,0 +1,204 @@
+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
diff --git a/installer_service/NOTICE b/installer_service/NOTICE
new file mode 100755 (executable)
index 0000000..49acec9
--- /dev/null
@@ -0,0 +1,3 @@
+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.
diff --git a/installer_service/include/installer-service.h b/installer_service/include/installer-service.h
new file mode 100755 (executable)
index 0000000..35fcbfa
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * 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"
diff --git a/installer_service/installer-service.rule b/installer_service/installer-service.rule
new file mode 100644 (file)
index 0000000..33beb1b
--- /dev/null
@@ -0,0 +1,2 @@
+installer-service device::app_logging w
+installer-service app.default include
diff --git a/installer_service/installer-service.xml b/installer_service/installer-service.xml
new file mode 100755 (executable)
index 0000000..ed36847
--- /dev/null
@@ -0,0 +1,15 @@
+<?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>
diff --git a/installer_service/src/installer-service.c b/installer_service/src/installer-service.c
new file mode 100755 (executable)
index 0000000..cfe688a
--- /dev/null
@@ -0,0 +1,428 @@
+/*
+ * 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);
+}
diff --git a/org.tizen.installer.edc b/org.tizen.installer.edc
new file mode 100644 (file)
index 0000000..4848d99
--- /dev/null
@@ -0,0 +1,51 @@
+#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";
+                       }
+               }
+       }
+}
diff --git a/org.tizen.installer.efl b/org.tizen.installer.efl
new file mode 100644 (file)
index 0000000..cde25a9
--- /dev/null
@@ -0,0 +1,24 @@
+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---
diff --git a/org.tizen.installer.manifest b/org.tizen.installer.manifest
new file mode 100755 (executable)
index 0000000..dfabf09
--- /dev/null
@@ -0,0 +1,39 @@
+<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>
diff --git a/org.tizen.installer.png b/org.tizen.installer.png
new file mode 100644 (file)
index 0000000..f6dc743
Binary files /dev/null and b/org.tizen.installer.png differ
diff --git a/org.tizen.installer.xml b/org.tizen.installer.xml
new file mode 100755 (executable)
index 0000000..4f5e132
--- /dev/null
@@ -0,0 +1,33 @@
+<?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>
diff --git a/packaging/org.tizen.installer.spec b/packaging/org.tizen.installer.spec
new file mode 100644 (file)
index 0000000..774fdb3
--- /dev/null
@@ -0,0 +1,89 @@
+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
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100644 (file)
index 0000000..26c1ee7
--- /dev/null
@@ -0,0 +1,23 @@
+# 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})
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..6d3187a
--- /dev/null
@@ -0,0 +1,4 @@
+# List of source files containing translatable strings.
+app-selector.c
+app-selector-view.c
+app-selector-util.c
diff --git a/po/as.po b/po/as.po
new file mode 100644 (file)
index 0000000..35bd690
--- /dev/null
+++ b/po/as.po
@@ -0,0 +1,39 @@
+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 "ইনষ্টল কৰা সংস্কৰণ:"
+
diff --git a/po/bn.po b/po/bn.po
new file mode 100644 (file)
index 0000000..7cccca2
--- /dev/null
+++ b/po/bn.po
@@ -0,0 +1,39 @@
+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 "ইনস্টল করা সংস্করণ:"
+
diff --git a/po/en.po b/po/en.po
new file mode 100644 (file)
index 0000000..6e09dce
--- /dev/null
+++ b/po/en.po
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/en_PH.po b/po/en_PH.po
new file mode 100644 (file)
index 0000000..6e09dce
--- /dev/null
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/en_US.po b/po/en_US.po
new file mode 100644 (file)
index 0000000..c08a00e
--- /dev/null
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/es_US.po b/po/es_US.po
new file mode 100644 (file)
index 0000000..c43fe67
--- /dev/null
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/gu.po b/po/gu.po
new file mode 100644 (file)
index 0000000..88c82e7
--- /dev/null
+++ b/po/gu.po
@@ -0,0 +1,39 @@
+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 "સ્થાપેલું સંસ્કરણ:"
+
diff --git a/po/hi.po b/po/hi.po
new file mode 100644 (file)
index 0000000..4171daf
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,39 @@
+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 "स्थापित संस्करण:"
+
diff --git a/po/id.po b/po/id.po
new file mode 100644 (file)
index 0000000..7845837
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/km.po b/po/km.po
new file mode 100644 (file)
index 0000000..01aceb5
--- /dev/null
+++ b/po/km.po
@@ -0,0 +1,39 @@
+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 "កំណែ​ដែល​បាន​ដំឡើង៖"
+
diff --git a/po/kn.po b/po/kn.po
new file mode 100644 (file)
index 0000000..fe8fb98
--- /dev/null
+++ b/po/kn.po
@@ -0,0 +1,39 @@
+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 "ಸ್ಥಾಪಿಸಿದ ಆವೃತ್ತಿ:"
+
diff --git a/po/ko_KR.po b/po/ko_KR.po
new file mode 100644 (file)
index 0000000..99836cf
--- /dev/null
@@ -0,0 +1,39 @@
+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 "설치한 버전:"
+
diff --git a/po/lo.po b/po/lo.po
new file mode 100644 (file)
index 0000000..1d48d20
--- /dev/null
+++ b/po/lo.po
@@ -0,0 +1,39 @@
+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 "ເວີເຊິນໄດ້ຕິດຕັ້ງໄວ້:"
+
diff --git a/po/ml.po b/po/ml.po
new file mode 100644 (file)
index 0000000..0e92adc
--- /dev/null
+++ b/po/ml.po
@@ -0,0 +1,39 @@
+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 "ഇൻസ്റ്റാൾ ചെയ്യപ്പെട്ട പതിപ്പ്:"
+
diff --git a/po/mr.po b/po/mr.po
new file mode 100644 (file)
index 0000000..25da8a0
--- /dev/null
+++ b/po/mr.po
@@ -0,0 +1,39 @@
+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 "इन्‍स्‍टॉल केलेली आवृत्‍ती:"
+
diff --git a/po/ms.po b/po/ms.po
new file mode 100644 (file)
index 0000000..352289a
--- /dev/null
+++ b/po/ms.po
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/my.po b/po/my.po
new file mode 100644 (file)
index 0000000..8642bb8
--- /dev/null
+++ b/po/my.po
@@ -0,0 +1,39 @@
+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 "တပ္ဆင္ထားေသာ ဗားရွင္း :"
+
diff --git a/po/ne.po b/po/ne.po
new file mode 100644 (file)
index 0000000..37b558b
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,39 @@
+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 "स्थापना गरिएको संस्करण:"
+
diff --git a/po/or.po b/po/or.po
new file mode 100644 (file)
index 0000000..79bdbf0
--- /dev/null
+++ b/po/or.po
@@ -0,0 +1,39 @@
+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 "ସଂସ୍ଥାପିତ ହୋଇଥିବା ସଂସ୍କରଣ:"
+
diff --git a/po/pa.po b/po/pa.po
new file mode 100644 (file)
index 0000000..edd8507
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,39 @@
+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 "ਸਥਾਪਿਤ ਕੀਤਾ ਗਿਆ ਸੰਸਕਰਣ:"
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644 (file)
index 0000000..886217a
--- /dev/null
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/si.po b/po/si.po
new file mode 100644 (file)
index 0000000..3a35f48
--- /dev/null
+++ b/po/si.po
@@ -0,0 +1,39 @@
+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 "ස්ථාපිත අනුවාදය:"
+
diff --git a/po/ta.po b/po/ta.po
new file mode 100644 (file)
index 0000000..9c4ab17
--- /dev/null
+++ b/po/ta.po
@@ -0,0 +1,39 @@
+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 "நிறுவிய பதிப்பு:"
+
diff --git a/po/te.po b/po/te.po
new file mode 100644 (file)
index 0000000..1f54476
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,39 @@
+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 "ఇన్‌స్టాల్ చేసిన వెర్షన్:"
+
diff --git a/po/th.po b/po/th.po
new file mode 100644 (file)
index 0000000..83fcb34
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,39 @@
+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 "เวอร์ชั่นที่ติดตั้ง:"
+
diff --git a/po/tl.po b/po/tl.po
new file mode 100644 (file)
index 0000000..78cd5f6
--- /dev/null
+++ b/po/tl.po
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/update-po.sh b/po/update-po.sh
new file mode 100755 (executable)
index 0000000..02c168a
--- /dev/null
@@ -0,0 +1,60 @@
+#!/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
+
diff --git a/po/ur.po b/po/ur.po
new file mode 100644 (file)
index 0000000..656ed1d
--- /dev/null
+++ b/po/ur.po
@@ -0,0 +1,39 @@
+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 "نصب کردہ ورژن:"
+
diff --git a/po/vi.po b/po/vi.po
new file mode 100644 (file)
index 0000000..3406338
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,39 @@
+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:"
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644 (file)
index 0000000..ce7c1d0
--- /dev/null
@@ -0,0 +1,39 @@
+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 "已安装版本:"
+
diff --git a/src/installer.c b/src/installer.c
new file mode 100644 (file)
index 0000000..770548e
--- /dev/null
@@ -0,0 +1,1033 @@
+/*
+ * 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, &current_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(&region_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;
+}
diff --git a/src/installer_package_manager.c b/src/installer_package_manager.c
new file mode 100644 (file)
index 0000000..c47c621
--- /dev/null
@@ -0,0 +1,150 @@
+#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;
+}
diff --git a/src/installer_util.c b/src/installer_util.c
new file mode 100644 (file)
index 0000000..d96139f
--- /dev/null
@@ -0,0 +1,128 @@
+#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, &macro);
+}
+
+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;
+}
diff --git a/tizen-manifest.xml b/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..7a8812b
--- /dev/null
@@ -0,0 +1,32 @@
+<?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>