/* * Copyright (c) Hisilicon Technologies Co., Ltd.. 2019-2020. All rights reserved. * Description: BootVideo Configer */ #include "BootvideoConfiger.h" #include #include #include #undef LOG_TAG #define LOG_TAG "BootVideo" namespace android { using namespace std; using namespace tinyxml2; const string BootvideoConfiger::PROPERTY_EN_UI = "isEnableUI"; const string BootvideoConfiger::PROPERTY_EN_COUNTDOWN = "isEnableCountDown"; const string BootvideoConfiger::PROPERTY_EN_VOLUMEBAR = "isEnableVolumeBar"; const string BootvideoConfiger::PROPERTY_EN_VOLUMEMUTE = "isEnableVolumeMute"; const string BootvideoConfiger::PROPERTY_EN_INPUT = "isEnableInput"; const string BootvideoConfiger::PROPERTY_PATH_FIRST = "path1"; const string BootvideoConfiger::PROPERTY_PATH_STR_FIRST = "strPath1"; const int VALUE_VIDEO_LIMIT = 20; BootvideoConfiger::BootvideoConfiger() { } BootvideoConfiger::~BootvideoConfiger() { } // check support feature bool BootvideoConfiger::IsFeature(const string property) const { string value = GetPropertyValue(property, "enable"); if (value == "true") { return true; } return false; } // get value feature string BootvideoConfiger::GetFeature(const string property) const { string value = GetPropertyValue(property, "value"); return value; } // get video limit time sec int BootvideoConfiger::GetVideoLimit() const { string temp = GetFeature(PROPERTY_VIDEO_LIMIT); int value = std::atoi(temp.c_str()); if (value != 0) { return value; } else { return VALUE_VIDEO_LIMIT; } } // check count language bool BootvideoConfiger::IsCountDownCH() const { string value = GetPropertyValue(PROPERTY_EN_COUNTDOWN, "language"); if (value == "ch") { return true; } return false; } // load config.xml or default.xml void BootvideoConfiger::InitConfiger(tinyxml2::XMLDocument& document) const { document.LoadFile(CONFIG_DEFAULT_PATH.c_str()); if (document.ErrorID() != 0) { ALOGE("load %s failed, set default config", CONFIG_DEFAULT_PATH.c_str()); document.Parse(CONFIG_DEFAULT_XML.c_str()); } } /** * name: GetPropertyValue * function: get bootvideo property attribute in the config.xml * param property: property is a feature, and attribute key is the feature of identity * param attribute: property may have many attribute * return: attribute corresponding value */ string BootvideoConfiger::GetPropertyValue(const string property, const string attr) const { auto mDocument = std::make_unique(); InitConfiger(*mDocument); // get xml root element XMLElement* root = mDocument->RootElement(); if (root == nullptr) { ALOGD("config xml not have root element"); return ""; } // get xml bootvideo element XMLElement* bootVideoElement = root->FirstChildElement(CONFIG_MODULE_BOOTVIDEO.c_str()); if (bootVideoElement == nullptr) { ALOGD("config xml not have %s element", CONFIG_MODULE_BOOTVIDEO.c_str()); return ""; } // get attribute value int the root element string propertyValue = GetElementValue(bootVideoElement, property, attr); if (propertyValue.empty()) { ALOGD("config xml not have %s property", property.c_str()); } return propertyValue; } /** * name: GetElementValue * function: find attribute in the element * param element: the element int the xml * param attrKey: property unique identifier int the element * param attrName: the user wants to access attribute * return: attrName corresponding value */ string BootvideoConfiger::GetElementValue(const XMLElement *element, const string attrKey, const string attrName) const { if (element == nullptr) { return ""; } const XMLElement* childElement = element->FirstChildElement(CONFIG_ITEM_PROPERTY.c_str()); while (childElement != nullptr) { // find attribute key const char* key = childElement->Attribute("key", attrKey.c_str()); if (key != nullptr) { // get attribute value const char* attrValue = childElement->Attribute(attrName.c_str()); if (attrValue != nullptr) { return string(attrValue); } } else { // find attribute int child element string attrValue = GetElementValue(childElement, attrKey, attrName); if (!attrValue.empty()) { return attrValue; } } // move index to next element childElement = childElement->NextSiblingElement(CONFIG_ITEM_PROPERTY.c_str()); } return ""; } } // namespace android