ManifestFixer.h revision cc5609d8e484ec82ef1dced793af7f674f059b1c
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
202ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#include "process/IResourceTableConsumer.h"
21467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski#include "util/Maybe.h"
22cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski#include "xml/XmlActionExecutor.h"
23467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski#include "xml/XmlDom.h"
24467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski
25467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski#include <string>
262ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
272ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinskinamespace aapt {
282ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
292ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinskistruct ManifestFixerOptions {
302ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski    Maybe<std::u16string> minSdkVersionDefault;
312ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski    Maybe<std::u16string> targetSdkVersionDefault;
3252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski    Maybe<std::u16string> renameManifestPackage;
3352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski    Maybe<std::u16string> renameInstrumentationTargetPackage;
3452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski    Maybe<std::u16string> versionNameDefault;
3552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski    Maybe<std::u16string> versionCodeDefault;
362ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski};
372ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
382ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski/**
392ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Verifies that the manifest is correctly formed and inserts defaults
402ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * where specified with ManifestFixerOptions.
412ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski */
42cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinskiclass ManifestFixer : public IXmlResourceConsumer {
43cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinskipublic:
442ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski    ManifestFixer(const ManifestFixerOptions& options) : mOptions(options) {
452ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski    }
462ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
47467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski    bool consume(IAaptContext* context, xml::XmlResource* doc) override;
48cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski
49cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinskiprivate:
50cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski    bool buildRules(xml::XmlActionExecutor* executor, IDiagnostics* diag);
51cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski
52cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski    ManifestFixerOptions mOptions;
532ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski};
542ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
552ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski} // namespace aapt
562ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski
572ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#endif /* AAPT_LINK_MANIFESTFIXER_H */
58