Parse and fill widget-application tag 53/54353/5
authorSangyoon Jang <s89.jang@samsung.com>
Tue, 15 Dec 2015 04:56:22 +0000 (13:56 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Thu, 17 Dec 2015 00:54:00 +0000 (16:54 -0800)
Change-Id: I7cb53a1834e87f70c8af47e8895ecbd0c756a486
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
src/common/step/step_generate_xml.cc
src/common/step/step_generate_xml.h
src/tpk/step/step_parse.cc
src/tpk/step/step_parse.h

index 000f0f6..d8f58d1 100644 (file)
@@ -75,13 +75,23 @@ void WriteServiceApplicationAttributes(
       BAD_CAST "false");
 }
 
+void WriteWidgetApplicationAttributes(
+    xmlTextWriterPtr writer, application_x *app) {
+  if (app->nodisplay)
+    xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay",
+        BAD_CAST app->nodisplay);
+  if (app->multiple)
+    xmlTextWriterWriteAttribute(writer, BAD_CAST "multiple",
+        BAD_CAST app->multiple);
+}
+
 }  // namespace
 
 namespace common_installer {
 namespace pkgmgr {
 
 common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml(
-    application_x* app, xmlTextWriterPtr writer, bool is_service) {
+    application_x* app, xmlTextWriterPtr writer, AppCompType type) {
   xmlTextWriterWriteAttribute(writer, BAD_CAST "appid", BAD_CAST app->appid);
 
   // binary is a symbolic link named <appid> and is located in <pkgid>/<appid>
@@ -98,10 +108,17 @@ common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml(
     xmlTextWriterWriteAttribute(writer, BAD_CAST "process-pool",
                                 BAD_CAST app->process_pool);
   // app-specific attributes
-  if (is_service)
+  switch (type) {
+  case AppCompType::UIAPP:
     WriteServiceApplicationAttributes(writer, app);
-  else
+    break;
+  case AppCompType::SVCAPP:
     WriteUIApplicationAttributes(writer, app);
+    break;
+  case AppCompType::WIDGETAPP:
+    WriteWidgetApplicationAttributes(writer, app);
+    break;
+  }
 
   for (label_x* label : GListRange<label_x*>(app->label)) {
     xmlTextWriterStartElement(writer, BAD_CAST "label");
@@ -327,18 +344,22 @@ common_installer::Step::Status StepGenerateXml::process() {
   // add application
   for (application_x* app :
        GListRange<application_x*>(context_->manifest_data.get()->application)) {
-    bool is_service = false;
+    AppCompType type;
     if (strcmp(app->component_type, "uiapp") == 0) {
+      type = AppCompType::UIAPP;
       xmlTextWriterStartElement(writer, BAD_CAST "ui-application");
     } else if (strcmp(app->component_type, "svcapp") == 0) {
-      is_service = true;
+      type = AppCompType::SVCAPP;
       xmlTextWriterStartElement(writer, BAD_CAST "service-application");
+    } else if (strcmp(app->component_type, "widgetapp") == 0) {
+      type = AppCompType::WIDGETAPP;
+      xmlTextWriterStartElement(writer, BAD_CAST "widget-application");
     } else {
       LOG(ERROR) << "Unknown application component_type";
       xmlFreeTextWriter(writer);
       return Status::ERROR;
     }
-    GenerateApplicationCommonXml(app, writer, is_service);
+    GenerateApplicationCommonXml(app, writer, type);
     xmlTextWriterEndElement(writer);
   }
 
index 2278753..2a5d622 100644 (file)
@@ -26,9 +26,15 @@ class StepGenerateXml : public common_installer::Step {
   Status precheck() override;
 
  private:
+  enum class AppCompType {
+    UIAPP,
+    SVCAPP,
+    WIDGETAPP
+  };
+
   Step::Status GenerateApplicationCommonXml(application_x* app,
                                             xmlTextWriterPtr writer,
-                                            bool is_service);
+                                            AppCompType type);
 
   SCOPE_LOG_TAG(GenerateXML)
 };
index 87037ff..0288800 100644 (file)
@@ -14,6 +14,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/widget_application_handler.h>
 #include <manifest_parser/manifest_constants.h>
 
 #include <pkgmgr/pkgmgr_parser.h>
@@ -227,6 +228,58 @@ bool StepParse::FillPrivileges(manifest_x* manifest) {
   return true;
 }
 
+bool StepParse::FillWidgetApplication(manifest_x* manifest) {
+  std::shared_ptr<const WidgetApplicationInfoList> widget_application_list =
+      std::static_pointer_cast<const WidgetApplicationInfoList>(
+          parser_->GetManifestData(app_keys::kWidgetApplicationKey));
+  if (!widget_application_list)
+    return true;
+
+  for (const auto& application : widget_application_list->items) {
+    // if there is no app yet, set this app as mainapp
+    bool main_app = manifest->application == nullptr;
+
+    application_x* widget_app =
+        static_cast<application_x*>(calloc(1, sizeof(application_x)));
+    widget_app->appid = strdup(application.widget_info.appid().c_str());
+    widget_app->exec = strdup((context_->root_application_path.get()
+                           / manifest->package / "bin"
+                           / application.widget_info.exec()).c_str());
+    widget_app->launch_mode =
+        strdup(application.widget_info.launch_mode().c_str());
+    widget_app->multiple = strdup(application.widget_info.multiple().c_str());
+    widget_app->nodisplay =
+        strdup(application.widget_info.nodisplay().c_str());
+    widget_app->type = strdup("capp");
+    widget_app->component_type = strdup("widgetapp");
+    widget_app->hwacceleration =
+        strdup(application.widget_info.hwacceleration().c_str());
+    widget_app->onboot = strdup("false");
+    widget_app->autorestart = strdup("false");
+    widget_app->mainapp = main_app ? strdup("true") : strdup("false");
+    widget_app->enabled = strdup("true");
+    widget_app->screenreader = strdup("use-system-setting");
+    widget_app->recentimage = strdup("false");
+    widget_app->launchcondition = strdup("false");
+    widget_app->guestmode_visibility = strdup("true");
+    widget_app->permission_type = strdup("normal");
+    widget_app->ambient_support = strdup("false");
+    widget_app->package = strdup(manifest->package);
+    widget_app->support_disable = strdup(manifest->support_disable);
+    manifest->application = g_list_append(manifest->application, widget_app);
+
+    if (!FillApplicationIconPaths(widget_app, application.app_icons))
+      return false;
+    if (!FillLabel(widget_app, application.label))
+      return false;
+    if (!FillImage(widget_app, application.app_images))
+      return false;
+    if (!FillMetadata(widget_app, application.meta_data))
+      return false;
+  }
+  return true;
+}
+
 bool StepParse::FillServiceApplication(manifest_x* manifest) {
   std::shared_ptr<const ServiceApplicationInfoList> service_application_list =
       std::static_pointer_cast<const ServiceApplicationInfoList>(
@@ -524,6 +577,8 @@ bool StepParse::FillManifestX(manifest_x* manifest) {
     return false;
   if (!FillServiceApplication(manifest))
     return false;
+  if (!FillWidgetApplication(manifest))
+    return false;
   if (!FillPrivileges(manifest))
     return false;
   if (!FillAccounts())
index 0a02375..b1ccc4e 100644 (file)
@@ -47,6 +47,7 @@ class StepParse : public common_installer::Step {
   bool FillAuthorInfo(manifest_x* manifest);
   bool FillDescription(manifest_x* manifest);
   bool FillPrivileges(manifest_x* manifest);
+  bool FillWidgetApplication(manifest_x* manifest);
   bool FillServiceApplication(manifest_x* manifest);
   bool FillUIApplication(manifest_x* manifest);
   template <typename T>