blob: 91e755de2514e15555285aac90cdfc087b2ab3c1 [file] [log] [blame]
/*
* Copyright (C) 2015 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.
*/
#include "SdkConstants.h"
#include <algorithm>
#include <string>
#include <unordered_map>
#include <vector>
namespace aapt {
static const char* sDevelopmentSdkCodeName = "O";
static int sDevelopmentSdkLevel = 26;
static const std::vector<std::pair<uint16_t, size_t>> sAttrIdMap = {
{ 0x021c, 1 },
{ 0x021d, 2 },
{ 0x0269, SDK_CUPCAKE },
{ 0x028d, SDK_DONUT },
{ 0x02ad, SDK_ECLAIR },
{ 0x02b3, SDK_ECLAIR_0_1 },
{ 0x02b5, SDK_ECLAIR_MR1 },
{ 0x02bd, SDK_FROYO },
{ 0x02cb, SDK_GINGERBREAD },
{ 0x0361, SDK_HONEYCOMB },
{ 0x0363, SDK_HONEYCOMB_MR1 },
{ 0x0366, SDK_HONEYCOMB_MR2 },
{ 0x03a6, SDK_ICE_CREAM_SANDWICH },
{ 0x03ae, SDK_JELLY_BEAN },
{ 0x03cc, SDK_JELLY_BEAN_MR1 },
{ 0x03da, SDK_JELLY_BEAN_MR2 },
{ 0x03f1, SDK_KITKAT },
{ 0x03f6, SDK_KITKAT_WATCH },
{ 0x04ce, SDK_LOLLIPOP },
};
static bool lessEntryId(const std::pair<uint16_t, size_t>& p, uint16_t entryId) {
return p.first < entryId;
}
size_t findAttributeSdkLevel(ResourceId id) {
if (id.packageId() != 0x01 && id.typeId() != 0x01) {
return 0;
}
auto iter = std::lower_bound(sAttrIdMap.begin(), sAttrIdMap.end(), id.entryId(), lessEntryId);
if (iter == sAttrIdMap.end()) {
return SDK_LOLLIPOP_MR1;
}
return iter->second;
}
static const std::unordered_map<std::string, size_t> sAttrMap = {
{ "marqueeRepeatLimit", 2 },
{ "windowNoDisplay", 3 },
{ "backgroundDimEnabled", 3 },
{ "inputType", 3 },
{ "isDefault", 3 },
{ "windowDisablePreview", 3 },
{ "privateImeOptions", 3 },
{ "editorExtras", 3 },
{ "settingsActivity", 3 },
{ "fastScrollEnabled", 3 },
{ "reqTouchScreen", 3 },
{ "reqKeyboardType", 3 },
{ "reqHardKeyboard", 3 },
{ "reqNavigation", 3 },
{ "windowSoftInputMode", 3 },
{ "imeFullscreenBackground", 3 },
{ "noHistory", 3 },
{ "headerDividersEnabled", 3 },
{ "footerDividersEnabled", 3 },
{ "candidatesTextStyleSpans", 3 },
{ "smoothScrollbar", 3 },
{ "reqFiveWayNav", 3 },
{ "keyBackground", 3 },
{ "keyTextSize", 3 },
{ "labelTextSize", 3 },
{ "keyTextColor", 3 },
{ "keyPreviewLayout", 3 },
{ "keyPreviewOffset", 3 },
{ "keyPreviewHeight", 3 },
{ "verticalCorrection", 3 },
{ "popupLayout", 3 },
{ "state_long_pressable", 3 },
{ "keyWidth", 3 },
{ "keyHeight", 3 },
{ "horizontalGap", 3 },
{ "verticalGap", 3 },
{ "rowEdgeFlags", 3 },
{ "codes", 3 },
{ "popupKeyboard", 3 },
{ "popupCharacters", 3 },
{ "keyEdgeFlags", 3 },
{ "isModifier", 3 },
{ "isSticky", 3 },
{ "isRepeatable", 3 },
{ "iconPreview", 3 },
{ "keyOutputText", 3 },
{ "keyLabel", 3 },
{ "keyIcon", 3 },
{ "keyboardMode", 3 },
{ "isScrollContainer", 3 },
{ "fillEnabled", 3 },
{ "updatePeriodMillis", 3 },
{ "initialLayout", 3 },
{ "voiceSearchMode", 3 },
{ "voiceLanguageModel", 3 },
{ "voicePromptText", 3 },
{ "voiceLanguage", 3 },
{ "voiceMaxResults", 3 },
{ "bottomOffset", 3 },
{ "topOffset", 3 },
{ "allowSingleTap", 3 },
{ "handle", 3 },
{ "content", 3 },
{ "animateOnClick", 3 },
{ "configure", 3 },
{ "hapticFeedbackEnabled", 3 },
{ "innerRadius", 3 },
{ "thickness", 3 },
{ "sharedUserLabel", 3 },
{ "dropDownWidth", 3 },
{ "dropDownAnchor", 3 },
{ "imeOptions", 3 },
{ "imeActionLabel", 3 },
{ "imeActionId", 3 },
{ "imeExtractEnterAnimation", 3 },
{ "imeExtractExitAnimation", 3 },
{ "tension", 4 },
{ "extraTension", 4 },
{ "anyDensity", 4 },
{ "searchSuggestThreshold", 4 },
{ "includeInGlobalSearch", 4 },
{ "onClick", 4 },
{ "targetSdkVersion", 4 },
{ "maxSdkVersion", 4 },
{ "testOnly", 4 },
{ "contentDescription", 4 },
{ "gestureStrokeWidth", 4 },
{ "gestureColor", 4 },
{ "uncertainGestureColor", 4 },
{ "fadeOffset", 4 },
{ "fadeDuration", 4 },
{ "gestureStrokeType", 4 },
{ "gestureStrokeLengthThreshold", 4 },
{ "gestureStrokeSquarenessThreshold", 4 },
{ "gestureStrokeAngleThreshold", 4 },
{ "eventsInterceptionEnabled", 4 },
{ "fadeEnabled", 4 },
{ "backupAgent", 4 },
{ "allowBackup", 4 },
{ "glEsVersion", 4 },
{ "queryAfterZeroResults", 4 },
{ "dropDownHeight", 4 },
{ "smallScreens", 4 },
{ "normalScreens", 4 },
{ "largeScreens", 4 },
{ "progressBarStyleInverse", 4 },
{ "progressBarStyleSmallInverse", 4 },
{ "progressBarStyleLargeInverse", 4 },
{ "searchSettingsDescription", 4 },
{ "textColorPrimaryInverseDisableOnly", 4 },
{ "autoUrlDetect", 4 },
{ "resizeable", 4 },
{ "required", 5 },
{ "accountType", 5 },
{ "contentAuthority", 5 },
{ "userVisible", 5 },
{ "windowShowWallpaper", 5 },
{ "wallpaperOpenEnterAnimation", 5 },
{ "wallpaperOpenExitAnimation", 5 },
{ "wallpaperCloseEnterAnimation", 5 },
{ "wallpaperCloseExitAnimation", 5 },
{ "wallpaperIntraOpenEnterAnimation", 5 },
{ "wallpaperIntraOpenExitAnimation", 5 },
{ "wallpaperIntraCloseEnterAnimation", 5 },
{ "wallpaperIntraCloseExitAnimation", 5 },
{ "supportsUploading", 5 },
{ "killAfterRestore", 5 },
{ "restoreNeedsApplication", 5 },
{ "smallIcon", 5 },
{ "accountPreferences", 5 },
{ "textAppearanceSearchResultSubtitle", 5 },
{ "textAppearanceSearchResultTitle", 5 },
{ "summaryColumn", 5 },
{ "detailColumn", 5 },
{ "detailSocialSummary", 5 },
{ "thumbnail", 5 },
{ "detachWallpaper", 5 },
{ "finishOnCloseSystemDialogs", 5 },
{ "scrollbarFadeDuration", 5 },
{ "scrollbarDefaultDelayBeforeFade", 5 },
{ "fadeScrollbars", 5 },
{ "colorBackgroundCacheHint", 5 },
{ "dropDownHorizontalOffset", 5 },
{ "dropDownVerticalOffset", 5 },
{ "quickContactBadgeStyleWindowSmall", 6 },
{ "quickContactBadgeStyleWindowMedium", 6 },
{ "quickContactBadgeStyleWindowLarge", 6 },
{ "quickContactBadgeStyleSmallWindowSmall", 6 },
{ "quickContactBadgeStyleSmallWindowMedium", 6 },
{ "quickContactBadgeStyleSmallWindowLarge", 6 },
{ "author", 7 },
{ "autoStart", 7 },
{ "expandableListViewWhiteStyle", 8 },
{ "installLocation", 8 },
{ "vmSafeMode", 8 },
{ "webTextViewStyle", 8 },
{ "restoreAnyVersion", 8 },
{ "tabStripLeft", 8 },
{ "tabStripRight", 8 },
{ "tabStripEnabled", 8 },
{ "logo", 9 },
{ "xlargeScreens", 9 },
{ "immersive", 9 },
{ "overScrollMode", 9 },
{ "overScrollHeader", 9 },
{ "overScrollFooter", 9 },
{ "filterTouchesWhenObscured", 9 },
{ "textSelectHandleLeft", 9 },
{ "textSelectHandleRight", 9 },
{ "textSelectHandle", 9 },
{ "textSelectHandleWindowStyle", 9 },
{ "popupAnimationStyle", 9 },
{ "screenSize", 9 },
{ "screenDensity", 9 },
{ "allContactsName", 11 },
{ "windowActionBar", 11 },
{ "actionBarStyle", 11 },
{ "navigationMode", 11 },
{ "displayOptions", 11 },
{ "subtitle", 11 },
{ "customNavigationLayout", 11 },
{ "hardwareAccelerated", 11 },
{ "measureWithLargestChild", 11 },
{ "animateFirstView", 11 },
{ "dropDownSpinnerStyle", 11 },
{ "actionDropDownStyle", 11 },
{ "actionButtonStyle", 11 },
{ "showAsAction", 11 },
{ "previewImage", 11 },
{ "actionModeBackground", 11 },
{ "actionModeCloseDrawable", 11 },
{ "windowActionModeOverlay", 11 },
{ "valueFrom", 11 },
{ "valueTo", 11 },
{ "valueType", 11 },
{ "propertyName", 11 },
{ "ordering", 11 },
{ "fragment", 11 },
{ "windowActionBarOverlay", 11 },
{ "fragmentOpenEnterAnimation", 11 },
{ "fragmentOpenExitAnimation", 11 },
{ "fragmentCloseEnterAnimation", 11 },
{ "fragmentCloseExitAnimation", 11 },
{ "fragmentFadeEnterAnimation", 11 },
{ "fragmentFadeExitAnimation", 11 },
{ "actionBarSize", 11 },
{ "imeSubtypeLocale", 11 },
{ "imeSubtypeMode", 11 },
{ "imeSubtypeExtraValue", 11 },
{ "splitMotionEvents", 11 },
{ "listChoiceBackgroundIndicator", 11 },
{ "spinnerMode", 11 },
{ "animateLayoutChanges", 11 },
{ "actionBarTabStyle", 11 },
{ "actionBarTabBarStyle", 11 },
{ "actionBarTabTextStyle", 11 },
{ "actionOverflowButtonStyle", 11 },
{ "actionModeCloseButtonStyle", 11 },
{ "titleTextStyle", 11 },
{ "subtitleTextStyle", 11 },
{ "iconifiedByDefault", 11 },
{ "actionLayout", 11 },
{ "actionViewClass", 11 },
{ "activatedBackgroundIndicator", 11 },
{ "state_activated", 11 },
{ "listPopupWindowStyle", 11 },
{ "popupMenuStyle", 11 },
{ "textAppearanceLargePopupMen", 11 },
{ "textAppearanceSmallPopupMen", 11 },
{ "breadCrumbTitle", 11 },
{ "breadCrumbShortTitle", 11 },
{ "listDividerAlertDialog", 11 },
{ "textColorAlertDialogListItem", 11 },
{ "loopViews", 11 },
{ "dialogTheme", 11 },
{ "alertDialogTheme", 11 },
{ "dividerVertical", 11 },
{ "homeAsUpIndicator", 11 },
{ "enterFadeDuration", 11 },
{ "exitFadeDuration", 11 },
{ "selectableItemBackground", 11 },
{ "autoAdvanceViewId", 11 },
{ "useIntrinsicSizeAsMinimum", 11 },
{ "actionModeCutDrawable", 11 },
{ "actionModeCopyDrawable", 11 },
{ "actionModePasteDrawable", 11 },
{ "textEditPasteWindowLayout", 11 },
{ "textEditNoPasteWindowLayout", 11 },
{ "textIsSelectable", 11 },
{ "windowEnableSplitTouch", 11 },
{ "indeterminateProgressStyle", 11 },
{ "progressBarPadding", 11 },
{ "animationResolution", 11 },
{ "state_accelerated", 11 },
{ "baseline", 11 },
{ "homeLayout", 11 },
{ "opacity", 11 },
{ "alpha", 11 },
{ "transformPivotX", 11 },
{ "transformPivotY", 11 },
{ "translationX", 11 },
{ "translationY", 11 },
{ "scaleX", 11 },
{ "scaleY", 11 },
{ "rotation", 11 },
{ "rotationX", 11 },
{ "rotationY", 11 },
{ "showDividers", 11 },
{ "dividerPadding", 11 },
{ "borderlessButtonStyle", 11 },
{ "dividerHorizontal", 11 },
{ "itemPadding", 11 },
{ "buttonBarStyle", 11 },
{ "buttonBarButtonStyle", 11 },
{ "segmentedButtonStyle", 11 },
{ "staticWallpaperPreview", 11 },
{ "allowParallelSyncs", 11 },
{ "isAlwaysSyncable", 11 },
{ "verticalScrollbarPosition", 11 },
{ "fastScrollAlwaysVisible", 11 },
{ "fastScrollThumbDrawable", 11 },
{ "fastScrollPreviewBackgroundLeft", 11 },
{ "fastScrollPreviewBackgroundRight", 11 },
{ "fastScrollTrackDrawable", 11 },
{ "fastScrollOverlayPosition", 11 },
{ "customTokens", 11 },
{ "nextFocusForward", 11 },
{ "firstDayOfWeek", 11 },
{ "showWeekNumber", 11 },
{ "minDate", 11 },
{ "maxDate", 11 },
{ "shownWeekCount", 11 },
{ "selectedWeekBackgroundColor", 11 },
{ "focusedMonthDateColor", 11 },
{ "unfocusedMonthDateColor", 11 },
{ "weekNumberColor", 11 },
{ "weekSeparatorLineColor", 11 },
{ "selectedDateVerticalBar", 11 },
{ "weekDayTextAppearance", 11 },
{ "dateTextAppearance", 11 },
{ "solidColor", 11 },
{ "spinnersShown", 11 },
{ "calendarViewShown", 11 },
{ "state_multiline", 11 },
{ "detailsElementBackground", 11 },
{ "textColorHighlightInverse", 11 },
{ "textColorLinkInverse", 11 },
{ "editTextColor", 11 },
{ "editTextBackground", 11 },
{ "horizontalScrollViewStyle", 11 },
{ "layerType", 11 },
{ "alertDialogIcon", 11 },
{ "windowMinWidthMajor", 11 },
{ "windowMinWidthMinor", 11 },
{ "queryHint", 11 },
{ "fastScrollTextColor", 11 },
{ "largeHeap", 11 },
{ "windowCloseOnTouchOutside", 11 },
{ "datePickerStyle", 11 },
{ "calendarViewStyle", 11 },
{ "textEditSidePasteWindowLayout", 11 },
{ "textEditSideNoPasteWindowLayout", 11 },
{ "actionMenuTextAppearance", 11 },
{ "actionMenuTextColor", 11 },
{ "textCursorDrawable", 12 },
{ "resizeMode", 12 },
{ "requiresSmallestWidthDp", 12 },
{ "compatibleWidthLimitDp", 12 },
{ "largestWidthLimitDp", 12 },
{ "state_hovered", 13 },
{ "state_drag_can_accept", 13 },
{ "state_drag_hovered", 13 },
{ "stopWithTask", 13 },
{ "switchTextOn", 13 },
{ "switchTextOff", 13 },
{ "switchPreferenceStyle", 13 },
{ "switchTextAppearance", 13 },
{ "track", 13 },
{ "switchMinWidth", 13 },
{ "switchPadding", 13 },
{ "thumbTextPadding", 13 },
{ "textSuggestionsWindowStyle", 13 },
{ "textEditSuggestionItemLayout", 13 },
{ "rowCount", 13 },
{ "rowOrderPreserved", 13 },
{ "columnCount", 13 },
{ "columnOrderPreserved", 13 },
{ "useDefaultMargins", 13 },
{ "alignmentMode", 13 },
{ "layout_row", 13 },
{ "layout_rowSpan", 13 },
{ "layout_columnSpan", 13 },
{ "actionModeSelectAllDrawable", 13 },
{ "isAuxiliary", 13 },
{ "accessibilityEventTypes", 13 },
{ "packageNames", 13 },
{ "accessibilityFeedbackType", 13 },
{ "notificationTimeout", 13 },
{ "accessibilityFlags", 13 },
{ "canRetrieveWindowContent", 13 },
{ "listPreferredItemHeightLarge", 13 },
{ "listPreferredItemHeightSmall", 13 },
{ "actionBarSplitStyle", 13 },
{ "actionProviderClass", 13 },
{ "backgroundStacked", 13 },
{ "backgroundSplit", 13 },
{ "textAllCaps", 13 },
{ "colorPressedHighlight", 13 },
{ "colorLongPressedHighlight", 13 },
{ "colorFocusedHighlight", 13 },
{ "colorActivatedHighlight", 13 },
{ "colorMultiSelectHighlight", 13 },
{ "drawableStart", 13 },
{ "drawableEnd", 13 },
{ "actionModeStyle", 13 },
{ "minResizeWidth", 13 },
{ "minResizeHeight", 13 },
{ "actionBarWidgetTheme", 13 },
{ "uiOptions", 13 },
{ "subtypeLocale", 13 },
{ "subtypeExtraValue", 13 },
{ "actionBarDivider", 13 },
{ "actionBarItemBackground", 13 },
{ "actionModeSplitBackground", 13 },
{ "textAppearanceListItem", 13 },
{ "textAppearanceListItemSmall", 13 },
{ "targetDescriptions", 13 },
{ "directionDescriptions", 13 },
{ "overridesImplicitlyEnabledSubtype", 13 },
{ "listPreferredItemPaddingLeft", 13 },
{ "listPreferredItemPaddingRight", 13 },
{ "requiresFadingEdge", 13 },
{ "publicKey", 13 },
{ "parentActivityName", 16 },
{ "isolatedProcess", 16 },
{ "importantForAccessibility", 16 },
{ "keyboardLayout", 16 },
{ "fontFamily", 16 },
{ "mediaRouteButtonStyle", 16 },
{ "mediaRouteTypes", 16 },
{ "supportsRtl", 17 },
{ "textDirection", 17 },
{ "textAlignment", 17 },
{ "layoutDirection", 17 },
{ "paddingStart", 17 },
{ "paddingEnd", 17 },
{ "layout_marginStart", 17 },
{ "layout_marginEnd", 17 },
{ "layout_toStartOf", 17 },
{ "layout_toEndOf", 17 },
{ "layout_alignStart", 17 },
{ "layout_alignEnd", 17 },
{ "layout_alignParentStart", 17 },
{ "layout_alignParentEnd", 17 },
{ "listPreferredItemPaddingStart", 17 },
{ "listPreferredItemPaddingEnd", 17 },
{ "singleUser", 17 },
{ "presentationTheme", 17 },
{ "subtypeId", 17 },
{ "initialKeyguardLayout", 17 },
{ "widgetCategory", 17 },
{ "permissionGroupFlags", 17 },
{ "labelFor", 17 },
{ "permissionFlags", 17 },
{ "checkedTextViewStyle", 17 },
{ "showOnLockScreen", 17 },
{ "format12Hour", 17 },
{ "format24Hour", 17 },
{ "timeZone", 17 },
{ "mipMap", 18 },
{ "mirrorForRtl", 18 },
{ "windowOverscan", 18 },
{ "requiredForAllUsers", 18 },
{ "indicatorStart", 18 },
{ "indicatorEnd", 18 },
{ "childIndicatorStart", 18 },
{ "childIndicatorEnd", 18 },
{ "restrictedAccountType", 18 },
{ "requiredAccountType", 18 },
{ "canRequestTouchExplorationMode", 18 },
{ "canRequestEnhancedWebAccessibility", 18 },
{ "canRequestFilterKeyEvents", 18 },
{ "layoutMode", 18 },
{ "keySet", 19 },
{ "targetId", 19 },
{ "fromScene", 19 },
{ "toScene", 19 },
{ "transition", 19 },
{ "transitionOrdering", 19 },
{ "fadingMode", 19 },
{ "startDelay", 19 },
{ "ssp", 19 },
{ "sspPrefix", 19 },
{ "sspPattern", 19 },
{ "addPrintersActivity", 19 },
{ "vendor", 19 },
{ "category", 19 },
{ "isAsciiCapable", 19 },
{ "autoMirrored", 19 },
{ "supportsSwitchingToNextInputMethod", 19 },
{ "requireDeviceUnlock", 19 },
{ "apduServiceBanner", 19 },
{ "accessibilityLiveRegion", 19 },
{ "windowTranslucentStatus", 19 },
{ "windowTranslucentNavigation", 19 },
{ "advancedPrintOptionsActivity", 19 },
{ "banner", 20 },
{ "windowSwipeToDismiss", 20 },
{ "isGame", 20 },
{ "allowEmbedded", 20 },
{ "setupActivity", 20 },
{ "fastScrollStyle", 21 },
{ "windowContentTransitions", 21 },
{ "windowContentTransitionManager", 21 },
{ "translationZ", 21 },
{ "tintMode", 21 },
{ "controlX1", 21 },
{ "controlY1", 21 },
{ "controlX2", 21 },
{ "controlY2", 21 },
{ "transitionName", 21 },
{ "transitionGroup", 21 },
{ "viewportWidth", 21 },
{ "viewportHeight", 21 },
{ "fillColor", 21 },
{ "pathData", 21 },
{ "strokeColor", 21 },
{ "strokeWidth", 21 },
{ "trimPathStart", 21 },
{ "trimPathEnd", 21 },
{ "trimPathOffset", 21 },
{ "strokeLineCap", 21 },
{ "strokeLineJoin", 21 },
{ "strokeMiterLimit", 21 },
{ "colorControlNormal", 21 },
{ "colorControlActivated", 21 },
{ "colorButtonNormal", 21 },
{ "colorControlHighlight", 21 },
{ "persistableMode", 21 },
{ "titleTextAppearance", 21 },
{ "subtitleTextAppearance", 21 },
{ "slideEdge", 21 },
{ "actionBarTheme", 21 },
{ "textAppearanceListItemSecondary", 21 },
{ "colorPrimary", 21 },
{ "colorPrimaryDark", 21 },
{ "colorAccent", 21 },
{ "nestedScrollingEnabled", 21 },
{ "windowEnterTransition", 21 },
{ "windowExitTransition", 21 },
{ "windowSharedElementEnterTransition", 21 },
{ "windowSharedElementExitTransition", 21 },
{ "windowAllowReturnTransitionOverlap", 21 },
{ "windowAllowEnterTransitionOverlap", 21 },
{ "sessionService", 21 },
{ "stackViewStyle", 21 },
{ "switchStyle", 21 },
{ "elevation", 21 },
{ "excludeId", 21 },
{ "excludeClass", 21 },
{ "hideOnContentScroll", 21 },
{ "actionOverflowMenuStyle", 21 },
{ "documentLaunchMode", 21 },
{ "maxRecents", 21 },
{ "autoRemoveFromRecents", 21 },
{ "stateListAnimator", 21 },
{ "toId", 21 },
{ "fromId", 21 },
{ "reversible", 21 },
{ "splitTrack", 21 },
{ "targetName", 21 },
{ "excludeName", 21 },
{ "matchOrder", 21 },
{ "windowDrawsSystemBarBackgrounds", 21 },
{ "statusBarColor", 21 },
{ "navigationBarColor", 21 },
{ "contentInsetStart", 21 },
{ "contentInsetEnd", 21 },
{ "contentInsetLeft", 21 },
{ "contentInsetRight", 21 },
{ "paddingMode", 21 },
{ "layout_rowWeight", 21 },
{ "layout_columnWeight", 21 },
{ "translateX", 21 },
{ "translateY", 21 },
{ "selectableItemBackgroundBorderless", 21 },
{ "elegantTextHeight", 21 },
{ "searchKeyphraseId", 21 },
{ "searchKeyphrase", 21 },
{ "searchKeyphraseSupportedLocales", 21 },
{ "windowTransitionBackgroundFadeDuration", 21 },
{ "overlapAnchor", 21 },
{ "progressTint", 21 },
{ "progressTintMode", 21 },
{ "progressBackgroundTint", 21 },
{ "progressBackgroundTintMode", 21 },
{ "secondaryProgressTint", 21 },
{ "secondaryProgressTintMode", 21 },
{ "indeterminateTint", 21 },
{ "indeterminateTintMode", 21 },
{ "backgroundTint", 21 },
{ "backgroundTintMode", 21 },
{ "foregroundTint", 21 },
{ "foregroundTintMode", 21 },
{ "buttonTint", 21 },
{ "buttonTintMode", 21 },
{ "thumbTint", 21 },
{ "thumbTintMode", 21 },
{ "fullBackupOnly", 21 },
{ "propertyXName", 21 },
{ "propertyYName", 21 },
{ "relinquishTaskIdentity", 21 },
{ "tileModeX", 21 },
{ "tileModeY", 21 },
{ "actionModeShareDrawable", 21 },
{ "actionModeFindDrawable", 21 },
{ "actionModeWebSearchDrawable", 21 },
{ "transitionVisibilityMode", 21 },
{ "minimumHorizontalAngle", 21 },
{ "minimumVerticalAngle", 21 },
{ "maximumAngle", 21 },
{ "searchViewStyle", 21 },
{ "closeIcon", 21 },
{ "goIcon", 21 },
{ "searchIcon", 21 },
{ "voiceIcon", 21 },
{ "commitIcon", 21 },
{ "suggestionRowLayout", 21 },
{ "queryBackground", 21 },
{ "submitBackground", 21 },
{ "buttonBarPositiveButtonStyle", 21 },
{ "buttonBarNeutralButtonStyle", 21 },
{ "buttonBarNegativeButtonStyle", 21 },
{ "popupElevation", 21 },
{ "actionBarPopupTheme", 21 },
{ "multiArch", 21 },
{ "touchscreenBlocksFocus", 21 },
{ "windowElevation", 21 },
{ "launchTaskBehindTargetAnimation", 21 },
{ "launchTaskBehindSourceAnimation", 21 },
{ "restrictionType", 21 },
{ "dayOfWeekBackground", 21 },
{ "dayOfWeekTextAppearance", 21 },
{ "headerMonthTextAppearance", 21 },
{ "headerDayOfMonthTextAppearance", 21 },
{ "headerYearTextAppearance", 21 },
{ "yearListItemTextAppearance", 21 },
{ "yearListSelectorColor", 21 },
{ "calendarTextColor", 21 },
{ "recognitionService", 21 },
{ "timePickerStyle", 21 },
{ "timePickerDialogTheme", 21 },
{ "headerTimeTextAppearance", 21 },
{ "headerAmPmTextAppearance", 21 },
{ "numbersTextColor", 21 },
{ "numbersBackgroundColor", 21 },
{ "numbersSelectorColor", 21 },
{ "amPmTextColor", 21 },
{ "amPmBackgroundColor", 21 },
{ "searchKeyphraseRecognitionFlags", 21 },
{ "checkMarkTint", 21 },
{ "checkMarkTintMode", 21 },
{ "popupTheme", 21 },
{ "toolbarStyle", 21 },
{ "windowClipToOutline", 21 },
{ "datePickerDialogTheme", 21 },
{ "showText", 21 },
{ "windowReturnTransition", 21 },
{ "windowReenterTransition", 21 },
{ "windowSharedElementReturnTransition", 21 },
{ "windowSharedElementReenterTransition", 21 },
{ "resumeWhilePausing", 21 },
{ "datePickerMode", 21 },
{ "timePickerMode", 21 },
{ "inset", 21 },
{ "letterSpacing", 21 },
{ "fontFeatureSettings", 21 },
{ "outlineProvider", 21 },
{ "contentAgeHint", 21 },
{ "country", 21 },
{ "windowSharedElementsUseOverlay", 21 },
{ "reparent", 21 },
{ "reparentWithOverlay", 21 },
{ "ambientShadowAlpha", 21 },
{ "spotShadowAlpha", 21 },
{ "navigationIcon", 21 },
{ "navigationContentDescription", 21 },
{ "fragmentExitTransition", 21 },
{ "fragmentEnterTransition", 21 },
{ "fragmentSharedElementEnterTransition", 21 },
{ "fragmentReturnTransition", 21 },
{ "fragmentSharedElementReturnTransition", 21 },
{ "fragmentReenterTransition", 21 },
{ "fragmentAllowEnterTransitionOverlap", 21 },
{ "fragmentAllowReturnTransitionOverlap", 21 },
{ "patternPathData", 21 },
{ "strokeAlpha", 21 },
{ "fillAlpha", 21 },
{ "windowActivityTransitions", 21 },
{ "colorEdgeEffect", 21 }
};
size_t findAttributeSdkLevel(const ResourceName& name) {
if (name.package != "android" && name.type != ResourceType::kAttr) {
return 0;
}
auto iter = sAttrMap.find(name.entry);
if (iter != sAttrMap.end()) {
return iter->second;
}
return SDK_LOLLIPOP_MR1;
}
std::pair<StringPiece, int> getDevelopmentSdkCodeNameAndVersion() {
return std::make_pair(StringPiece(sDevelopmentSdkCodeName), sDevelopmentSdkLevel);
}
} // namespace aapt