#ifndef AAPT_MANIFEST_MERGER_H
#define AAPT_MANIFEST_MERGER_H
#include "Logger.h"
#include "Source.h"
#include "XmlDom.h"
#include <memory>
#include <string>
namespace aapt {
class ManifestMerger {
public:
struct Options {
};
ManifestMerger(const Options& options);
bool setAppManifest(const Source& source, const std::u16string& package,
std::unique_ptr<xml::Node> root);
bool mergeLibraryManifest(const Source& source, const std::u16string& package,
std::unique_ptr<xml::Node> libRoot);
xml::Node* getMergedXml();
bool printMerged();
private:
bool mergeNewOrEqual(xml::Element* parentA, xml::Element* elA, xml::Element* elB);
bool mergePreferRequired(xml::Element* parentA, xml::Element* elA, xml::Element* elB);
bool checkEqual(xml::Element* elA, xml::Element* elB);
bool mergeApplication(xml::Element* applicationA, xml::Element* applicationB);
bool mergeUsesSdk(xml::Element* elA, xml::Element* elB);
Options mOptions;
std::unique_ptr<xml::Node> mRoot;
SourceLogger mAppLogger;
SourceLogger mLogger;
};
} // namespace aapt
#endif // AAPT_MANIFEST_MERGER_H