12ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski/*
22ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Copyright (C) 2015 The Android Open Source Project
32ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski *
42ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
52ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * you may not use this file except in compliance with the License.
62ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * You may obtain a copy of the License at
72ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski *
82ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
92ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski *
102ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Unless required by applicable law or agreed to in writing, software
112ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
122ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * See the License for the specific language governing permissions and
142ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * limitations under the License.
152ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski */
162ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
172ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#ifndef AAPT_LINK_MANIFESTFIXER_H
182ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#define AAPT_LINK_MANIFESTFIXER_H
192ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
20ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include <string>
21ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski
22ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include "android-base/macros.h"
23ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski
242ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#include "process/IResourceTableConsumer.h"
25467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski#include "util/Maybe.h"
26cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski#include "xml/XmlActionExecutor.h"
27467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski#include "xml/XmlDom.h"
28467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski
292ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinskinamespace aapt {
302ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
312ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinskistruct ManifestFixerOptions {
32ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  Maybe<std::string> min_sdk_version_default;
33ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  Maybe<std::string> target_sdk_version_default;
34ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  Maybe<std::string> rename_manifest_package;
35ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  Maybe<std::string> rename_instrumentation_target_package;
36ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  Maybe<std::string> version_name_default;
37ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  Maybe<std::string> version_code_default;
382ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski};
392ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
402ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski/**
412ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Verifies that the manifest is correctly formed and inserts defaults
422ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * where specified with ManifestFixerOptions.
432ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski */
44cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinskiclass ManifestFixer : public IXmlResourceConsumer {
45cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski public:
46cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  explicit ManifestFixer(const ManifestFixerOptions& options)
47ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski      : options_(options) {}
482ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
49ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  bool Consume(IAaptContext* context, xml::XmlResource* doc) override;
50cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski
51cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski private:
52ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  DISALLOW_COPY_AND_ASSIGN(ManifestFixer);
53ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski
54ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  bool BuildRules(xml::XmlActionExecutor* executor, IDiagnostics* diag);
55cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski
56ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  ManifestFixerOptions options_;
572ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski};
582ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
59cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski}  // namespace aapt
602ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
612ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#endif /* AAPT_LINK_MANIFESTFIXER_H */
62