Processing watch application from config.xml 47/60247/6
authorTomasz Iwanek <t.iwanek@samsung.com>
Wed, 24 Feb 2016 08:33:50 +0000 (09:33 +0100)
committerTomasz Iwanek <t.iwanek@samsung.com>
Fri, 4 Mar 2016 12:39:20 +0000 (04:39 -0800)
Writes information about wgt's watch application to manifest_x
and adds it to generated platform xml in wgt-backend.

In tizen 2.x watch-application was not registered by wgt-installer
AT ALL. This was done libwatch-application.so pkgmgr plugin parser.
This behaviour should be probably removed so that only app-installer
insert data into pkgmgr database. After this commit data of all
applications (including watch-application) is added to pkgmgr_parser.db.

Note that update installation of watch-application will work only
when tizen-manifest.xml parsing changes will be introduced.

Requires:
 - https://review.tizen.org/gerrit/#/c/60241/

Change-Id: I67f9cf1c04ecf435cfc90f5ab83d2ccebbc45a4a

src/wgt/step/step_generate_xml.cc
src/wgt/step/step_generate_xml.h
src/wgt/step/step_parse.cc
src/wgt/step/step_parse.h

index 71d956f5814e4b89cf2d358b3d64723ce6b2e5b6..176c9088e44665e00c0781a8d17c30a6131b8369 100644 (file)
@@ -87,6 +87,13 @@ void WriteWidgetApplicationAttributes(
         BAD_CAST app->multiple);
 }
 
+void WriteWatchApplicationAttributes(
+    xmlTextWriterPtr writer, application_x *app) {
+  if (app->ambient_support)
+    xmlTextWriterWriteAttribute(writer, BAD_CAST "ambient-support",
+        BAD_CAST app->ambient_support);
+}
+
 }  // namespace
 
 namespace wgt {
@@ -120,6 +127,9 @@ common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml(
   case AppCompType::WIDGETAPP:
     WriteWidgetApplicationAttributes(writer, app);
     break;
+  case AppCompType::WATCHAPP:
+    WriteWatchApplicationAttributes(writer, app);
+    break;
   }
 
   for (label_x* label : GListRange<label_x*>(app->label)) {
@@ -338,6 +348,9 @@ common_installer::Step::Status StepGenerateXml::process() {
     } else if (strcmp(app->component_type, "widgetapp") == 0) {
       type = AppCompType::WIDGETAPP;
       xmlTextWriterStartElement(writer, BAD_CAST "widget-application");
+    } else if (strcmp(app->component_type, "watchapp") == 0) {
+      type = AppCompType::WATCHAPP;
+      xmlTextWriterStartElement(writer, BAD_CAST "watch-application");
     } else {
       LOG(ERROR) << "Unknown application component_type";
       xmlFreeTextWriter(writer);
index 53519919f22fce483aa8520c4832814af4a1b08b..0f62498cd0242cca444037fe097d274f47dcc77e 100644 (file)
@@ -29,7 +29,8 @@ class StepGenerateXml : public common_installer::Step {
   enum class AppCompType {
     UIAPP,
     SVCAPP,
-    WIDGETAPP
+    WIDGETAPP,
+    WATCHAPP
   };
 
   Step::Status GenerateApplicationCommonXml(application_x* app,
index cb77e2812c29cf314c4258a1c89db24008a881e4..935b30324308ea8e4897b9872d56f479ec02e8b7 100644 (file)
@@ -43,6 +43,10 @@ namespace bf = boost::filesystem;
 
 namespace {
 
+const char kCategoryWearableClock[] =
+    "http://tizen.org/category/wearable_clock";
+const char kCategoryWatchClock[] = "com.samsung.wmanager.WATCH_CLOCK";
+
 const std::string kManifestVersion = "1.0.0";
 const char kTizenPackageXmlNamespace[] = "http://tizen.org/ns/packages";
 
@@ -60,7 +64,6 @@ GList* GenerateMetadataListX(const wgt::parse::MetaDataInfo& meta_info) {
 }
 
 void SetApplicationXDefaults(application_x* application) {
-  application->ambient_support = strdup("false");
   application->effectimage_type = strdup("image");
   application->enabled = strdup("true");
   application->guestmode_visibility = strdup("true");
@@ -234,7 +237,7 @@ bool StepParse::FillWidgetInfo(manifest_x* manifest) {
   return true;
 }
 
-bool StepParse::FillUIApplicationInfo(manifest_x* manifest) {
+bool StepParse::FillMainApplicationInfo(manifest_x* manifest) {
   std::shared_ptr<const TizenApplicationInfo> app_info =
       std::static_pointer_cast<const TizenApplicationInfo>(
           parser_->GetManifestData(app_keys::kTizenApplicationKey));
@@ -242,15 +245,34 @@ bool StepParse::FillUIApplicationInfo(manifest_x* manifest) {
     LOG(ERROR) << "Application info manifest data has not been found.";
     return false;
   }
+  bool has_watch_catergory = false;
+  std::shared_ptr<const CategoryInfoList> category_info =
+      std::static_pointer_cast<const CategoryInfoList>(parser_->GetManifestData(
+          app_keys::kTizenCategoryKey));
+  if (category_info) {
+    has_watch_catergory = std::find_if(category_info->categories.begin(),
+                                       category_info->categories.end(),
+                                       [](const std::string& category) {
+      return category == kCategoryWearableClock ||
+             category == kCategoryWatchClock;
+    }) != category_info->categories.end();
+  }
+
   // application data
   application_x* application = reinterpret_cast<application_x*>(
       calloc(1, sizeof(application_x)));
-  application->component_type = strdup("uiapp");
+  application->component_type =
+      has_watch_catergory ? strdup("watchapp") : strdup("uiapp");
   application->mainapp = strdup("true");
   application->nodisplay = strdup("false");
   application->multiple = strdup("false");
   application->appid = strdup(app_info->id().c_str());
   SetApplicationXDefaults(application);
+  if (has_watch_catergory)
+    application->ambient_support =
+        strdup(app_info->ambient_support() ? "true" : "false");
+  else
+    application->ambient_support = strdup("false");
   application->package = strdup(app_info->package().c_str());
 
   application->exec =
@@ -298,6 +320,7 @@ bool StepParse::FillServiceApplicationInfo(manifest_x* manifest) {
     application->autorestart =
         service_info.auto_restart() ? strdup("true") : strdup("false");
     SetApplicationXDefaults(application);
+    application->ambient_support = strdup("false");
     application->package = strdup(manifest->package);
 
     for (auto& pair : service_info.names()) {
@@ -449,7 +472,7 @@ bool StepParse::FillExtraManifestInfo(manifest_x* manifest) {
 bool StepParse::FillManifestX(manifest_x* manifest) {
   if (!FillIconPaths(manifest))
     return false;
-  if (!FillUIApplicationInfo(manifest))
+  if (!FillMainApplicationInfo(manifest))
     return false;
   if (!FillWidgetInfo(manifest))
     return false;
index 06956b07065349c2d6ffe2096fa525eafa1cefe7..dc723cb7812d25b472a48c87e00ec87e851908fe 100644 (file)
@@ -50,7 +50,7 @@ class StepParse : public common_installer::Step {
   bool FillInstallationInfo(manifest_x* manifest);
   bool FillIconPaths(manifest_x* manifest);
   bool FillWidgetInfo(manifest_x* manifest);
-  bool FillUIApplicationInfo(manifest_x* manifest);
+  bool FillMainApplicationInfo(manifest_x* manifest);
   bool FillServiceApplicationInfo(manifest_x* manifest);
   bool FillAppControl(manifest_x* manifest);
   bool FillPrivileges(manifest_x* manifest);