/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.manifmerger; import com.android.utils.SdkUtils; /** * Defines node operation types as it can be provided by user's through attributes on the * target xml element. * * <p> * Example: * <pre> * <activity android:name="com.foo.bar.ActivityUI" * tools:node="remove_children"> * </activity> * </pre> * */ public enum NodeOperationType implements ConvertibleName { /** * Merges further definitions of the same element with this one. */ MERGE(false), /** * Remove all children from the target element before merging it into the resulting merged * manifest. This basically merges attributes only (attributes annotation still applies). */ MERGE_ONLY_ATTRIBUTES(false), /** * Replace further definitions of the same element with this one. There can be 0..n similar * elements replaced with the annotated xml element. */ REPLACE(false), /** * Remove the next definition of the same element from the resulting merged manifest. There can * be only one similar element removed. If further definition are encountered, a merging * failure will be initiated. */ REMOVE(true), /** * Remove all definitions of the same element from the resulting merged manifest. */ REMOVE_ALL(true), /** * Remove all children from the target element before merging it into the resulting merged * manifest. This basically merges all attributes only (attributes annotation still applies). */ REMOVE_CHILDREN(false), /** * No further definition of this element should be encountered. A merging tool failure will be * generated if there is one. */ STRICT(false); // specifies whether the node operation can support an associated {@link Selector} private final boolean mIsSelectable; NodeOperationType(boolean isSelectable) { mIsSelectable = isSelectable; } /** * Returns true if this operation supports a {@link com.android.manifmerger.Selector} */ public boolean isSelectable() { return mIsSelectable; } @Override public String toXmlName() { return SdkUtils.constantNameToXmlName(name()); } @Override public String toCamelCaseName() { return SdkUtils.constantNameToCamelCase(name()); } /** * Returns true if the element will override (remove or replace) lower priority elements. */ public boolean isOverriding() { return this == REMOVE || this == REMOVE_ALL || this == REPLACE; } /** * Local xml name of node operation types. */ static final String NODE_LOCAL_NAME = "node"; //$NON-NLS-1$ /** * local xml name for overriding uses-sdk operation types. */ static final String OVERRIDE_USES_SDK = "overrideLibrary"; }