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>
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");
// 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);
}
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)
};
#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>
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>(
return false;
if (!FillServiceApplication(manifest))
return false;
+ if (!FillWidgetApplication(manifest))
+ return false;
if (!FillPrivileges(manifest))
return false;
if (!FillAccounts())
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>