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