Add WatchApplication support to parse step 04/60604/12
authorArkadiusz Szulakiewicz <a.szulakiewi@partner.samsung.com>
Mon, 29 Feb 2016 08:49:05 +0000 (09:49 +0100)
committerTomasz Iwanek <t.iwanek@samsung.com>
Wed, 2 Mar 2016 09:27:08 +0000 (01:27 -0800)
Change-Id: Ia309c649263a20733a0c4b1abfa1282702248545

src/common/step/step_parse_manifest.cc
src/common/step/step_parse_manifest.h

index ea81a80..084ab96 100644 (file)
@@ -17,6 +17,7 @@
 #include <tpk_manifest_handlers/service_application_handler.h>
 #include <tpk_manifest_handlers/shortcut_handler.h>
 #include <tpk_manifest_handlers/ui_application_handler.h>
+#include <tpk_manifest_handlers/watch_application_handler.h>
 #include <tpk_manifest_handlers/widget_application_handler.h>
 
 #include <chrono>
@@ -149,12 +150,15 @@ bool StepParseManifest::FillPackageInfo(manifest_x* manifest) {
   auto widget_application_list =
       std::static_pointer_cast<const tpk::parse::WidgetApplicationInfoList>(
           parser_->GetManifestData(app_keys::kWidgetApplicationKey));
+  auto watch_application_list =
+      std::static_pointer_cast<const tpk::parse::WatchApplicationInfoList>(
+          parser_->GetManifestData(app_keys::kWatchApplicationKey));
 
   // mandatory check
   if (!ui_application_list && !service_application_list &&
-      !widget_application_list) {
+      !widget_application_list && !watch_application_list) {
     LOG(ERROR) << "UI Application or Service Application or Widget Application "
-                  "are mandatory and has not been found.";
+                  "or Watch Application are mandatory and has not been found.";
     return false;
   }
 
@@ -466,6 +470,59 @@ bool StepParseManifest::FillUIApplication(manifest_x* manifest) {
   return true;
 }
 
+bool StepParseManifest::FillWatchApplication(manifest_x* manifest) {
+  auto watch_application_list =
+        std::static_pointer_cast<const tpk::parse::WatchApplicationInfoList>(
+            parser_->GetManifestData(app_keys::kWatchApplicationKey));
+  if (!watch_application_list)
+    return true;
+
+  for (const auto& watch_application : watch_application_list->items) {
+    application_x* watch_app =
+             static_cast<application_x*>(calloc(1, sizeof(application_x)));
+    watch_app->appid = strdup(watch_application.app_info.appid().c_str());
+
+    if (bf::path(watch_application.app_info.exec().c_str()).is_absolute())
+      watch_app->exec = strdup(watch_application.app_info.exec().c_str());
+    else
+      watch_app->exec = strdup(
+          (context_->root_application_path.get()
+                               / manifest->package / "bin" /
+                               watch_application.app_info.exec()).c_str());
+    watch_app->nodisplay = strdup("false");
+    watch_app->multiple = strdup("false");
+    watch_app->type = strdup(watch_application.app_info.type().c_str());
+    watch_app->taskmanage = strdup("true");
+    watch_app->enabled = strdup("true");
+    watch_app->hwacceleration = strdup("default");
+    watch_app->screenreader = strdup("use-system-setting");
+    watch_app->mainapp = strdup("false");
+    watch_app->recentimage = strdup("false");
+    watch_app->launchcondition = strdup("false");
+    watch_app->indicatordisplay = strdup("true");
+    watch_app->effectimage_type = strdup("image");
+    watch_app->guestmode_visibility = strdup("true");
+    watch_app->permission_type = strdup("normal");
+    watch_app->component_type = strdup("watchapp");
+    watch_app->preload = strdup("false");
+    watch_app->submode = strdup("false");
+    watch_app->process_pool = strdup("false");
+    watch_app->autorestart = strdup("false");
+    watch_app->onboot = strdup("false");
+    watch_app->support_disable = strdup(manifest->support_disable);
+    watch_app->ui_gadget = strdup("false");
+    watch_app->launch_mode = strdup("single");
+    watch_app->ambient_support =
+        strdup(watch_application.app_info.ambient_support().c_str());
+    if (!FillLabel(watch_app, watch_application.label))
+      return false;
+    if (!FillApplicationIconPaths(watch_app, watch_application.app_icons))
+      return false;
+    manifest->application = g_list_append(manifest->application, watch_app);
+  }
+  return true;
+}
+
 template <typename T>
 bool StepParseManifest::FillAppControl(application_x* app,
                                        const T& app_control_list) {
@@ -687,6 +744,8 @@ bool StepParseManifest::FillManifestX(manifest_x* manifest) {
     return false;
   if (!FillWidgetApplication(manifest))
     return false;
+  if (!FillWatchApplication(manifest))
+    return false;
   if (!FillPrivileges(manifest))
     return false;
   if (!FillAuthorInfo(manifest))
index 6853a8a..0fc6224 100644 (file)
@@ -69,6 +69,8 @@ class StepParseManifest : public common_installer::Step {
   bool FillWidgetApplication(manifest_x* manifest);
   bool FillServiceApplication(manifest_x* manifest);
   bool FillUIApplication(manifest_x* manifest);
+  bool FillWatchApplication(manifest_x* manifest);
+
   template <typename T>
       bool FillAppControl(application_x* manifest, const T& app_control_list);
   template <typename T>