blob: 9f0ccc2794a03b7434e3ed29709cce176e4f1a68 [file] [log] [blame]
/*
* Copyright (C) 2013 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.sdklib.repository.descriptors;
import com.android.SdkConstants;
import com.android.annotations.NonNull;
import com.android.sdklib.AndroidVersion;
import com.android.sdklib.internal.repository.LocalSdkParser;
import com.android.sdklib.repository.FullRevision;
import com.android.sdklib.repository.MajorRevision;
import com.android.sdklib.repository.local.LocalSdk;
import java.util.EnumSet;
/**
* Package types handled by the {@link LocalSdk}.
* <p/>
* Integer bit values are provided via {@link #getIntValue()} for backward
* compatibility with the older {@link LocalSdkParser} class.
* The integer bit values also indicate the natural ordering of the packages.
*/
public enum PkgType implements IPkgCapabilities {
// Boolean attributes below, in that order:
// maj-r, full-r, api, path, tag, vend, min-t-r, min-pt-r
//
// Corresponding flags for list description pattern string:
// $MAJ $FULL $API $PATH $TAG $VEND $NAME (for extras & add-ons)
//
//
/** Filter the SDK/tools folder.
* Has {@link FullRevision}. */
PKG_TOOLS(0x0001, SdkConstants.FD_TOOLS,
"Android SDK Tools $FULL",
false, true /*full-r*/, false, false, false, false, false, true /*min-pt-r*/),
/** Filter the SDK/platform-tools folder.
* Has {@link FullRevision}. */
PKG_PLATFORM_TOOLS(0x0002, SdkConstants.FD_PLATFORM_TOOLS,
"Android SDK Platform-Tools $FULL",
false, true /*full-r*/, false, false, false, false, false, false),
/** Filter the SDK/build-tools folder.
* Has {@link FullRevision}. */
PKG_BUILD_TOOLS(0x0004, SdkConstants.FD_BUILD_TOOLS,
"Android SDK Build-Tools $FULL",
false, true /*full-r*/, false, false, false, false, false, false),
/** Filter the SDK/docs folder.
* Has {@link MajorRevision}. */
PKG_DOC(0x0010, SdkConstants.FD_DOCS,
"Documentation for Android SDK",
true /*maj-r*/, false, true /*api*/, false, false, false, false, false),
/** Filter the SDK/platforms.
* Has {@link AndroidVersion}. Has {@link MajorRevision}.
* Path returns the platform's target hash. */
PKG_PLATFORM(0x0100, SdkConstants.FD_PLATFORMS,
"Android SDK Platform $API{?$MAJ>1:, rev $MAJ}",
true /*maj-r*/, false, true /*api*/, true /*path*/, false, false, true /*min-t-r*/, false),
/** Filter the SDK/system-images/android.
* Has {@link AndroidVersion}. Has {@link MajorRevision}. Has tag.
* Path returns the system image ABI. */
PKG_SYS_IMAGE(0x0200, SdkConstants.FD_SYSTEM_IMAGES,
"$PATH System Image, Android $API{?$MAJ>1:, rev $MAJ}",
true /*maj-r*/, false, true /*api*/, true /*path*/, true /*tag*/, false /*vend*/, false, false),
/** Filter the SDK/addons.
* Has {@link AndroidVersion}. Has {@link MajorRevision}.
* Path returns the add-on's target hash. */
PKG_ADDON(0x0400, SdkConstants.FD_ADDONS,
"{|$NAME|$VEND $PATH|}, Android $API{?$MAJ>1:, rev $MAJ}",
true /*maj-r*/, false, true /*api*/, true /*path*/, false, true /*vend*/, false, false),
/** Filter the SDK/system-images/addons.
* Has {@link AndroidVersion}. Has {@link MajorRevision}. Has tag.
* Path returns the system image ABI. */
PKG_ADDON_SYS_IMAGE(0x0800, SdkConstants.FD_SYSTEM_IMAGES,
"{|$NAME|$VEND $PATH|} System Image, Android $API{?$MAJ>1:, rev $MAJ}",
true /*maj-r*/, false, true /*api*/, true /*path*/, true /*tag*/, true /*vend*/, false, false),
/** Filter the SDK/samples folder.
* Note: this will not detect samples located in the SDK/extras packages.
* Has {@link AndroidVersion}. Has {@link MajorRevision}. */
PKG_SAMPLE(0x1000, SdkConstants.FD_SAMPLES,
"Samples for Android $API{?$MAJ>1:, rev $MAJ}",
true /*maj-r*/, false, true /*api*/, false, false, false, true /*min-t-r*/, false),
/** Filter the SDK/sources folder.
* Has {@link AndroidVersion}. Has {@link MajorRevision}. */
PKG_SOURCE(0x2000, SdkConstants.FD_ANDROID_SOURCES,
"Sources for Android $API{?$MAJ>1:, rev $MAJ}",
true /*maj-r*/, false, true /*api*/, false, false, false, false, false),
/** Filter the SDK/extras folder.
* Has {@code Path}. Has {@link MajorRevision}.
* Path returns the combined vendor id + extra path.
* Cast the descriptor to {@link IPkgDescExtra} to get extra's specific attributes. */
PKG_EXTRA(0x4000, SdkConstants.FD_EXTRAS,
"{|$NAME|$VEND $PATH|}{?$FULL>1:, rev $FULL}",
false, true /*full-r*/, false, true /*path*/, false, true /*vend*/, false, false),
/** The SDK/ndk folder. */
PKG_NDK(0x8000, SdkConstants.FD_NDK, "",
false, true, false, false, false, false, false, false);
/** A collection of all the known PkgTypes. */
public static final EnumSet<PkgType> PKG_ALL = EnumSet.allOf(PkgType.class);
/** Integer value matching all available pkg types, for the old LocalSdkParer. */
public static final int PKG_ALL_INT = 0xFFFF;
private int mIntValue;
private String mFolderName;
private final boolean mHasMajorRevision;
private final boolean mHasFullRevision;
private final boolean mHasAndroidVersion;
private final boolean mHasPath;
private final boolean mHasTag;
private final boolean mHasVendor;
private final boolean mHasMinToolsRev;
private final boolean mHasMinPlatformToolsRev;
private final String mListDisplayPattern;
PkgType(int intValue,
@NonNull String folderName,
@NonNull String listDisplayPattern,
boolean hasMajorRevision,
boolean hasFullRevision,
boolean hasAndroidVersion,
boolean hasPath,
boolean hasTag,
boolean hasVendor,
boolean hasMinToolsRev,
boolean hasMinPlatformToolsRev) {
mIntValue = intValue;
mFolderName = folderName;
mListDisplayPattern = listDisplayPattern;
mHasMajorRevision = hasMajorRevision;
mHasFullRevision = hasFullRevision;
mHasAndroidVersion = hasAndroidVersion;
mHasPath = hasPath;
mHasTag = hasTag;
mHasVendor = hasVendor;
mHasMinToolsRev = hasMinToolsRev;
mHasMinPlatformToolsRev = hasMinPlatformToolsRev;
}
/** Returns the integer value matching the type, compatible with the old LocalSdkParer. */
public int getIntValue() {
return mIntValue;
}
/** Returns the name of SDK top-folder where this type of package is stored. */
@NonNull
public String getFolderName() {
return mFolderName;
}
@Override
public boolean hasMajorRevision() {
return mHasMajorRevision;
}
@Override
public boolean hasFullRevision() {
return mHasFullRevision;
}
@Override
public boolean hasAndroidVersion() {
return mHasAndroidVersion;
}
@Override
public boolean hasPath() {
return mHasPath;
}
@Override
public boolean hasTag() {
return mHasTag;
}
@Override
public boolean hasVendor() {
return mHasVendor;
}
@Override
public boolean hasMinToolsRev() {
return mHasMinToolsRev;
}
@Override
public boolean hasMinPlatformToolsRev() {
return mHasMinPlatformToolsRev;
}
/*
* Returns a pattern string used by {@link PkgDesc#getListDescription()} to
* compute a default list-display representation string for this package.
*/
public String getListDisplayPattern() {
return mListDisplayPattern;
}
}