/* * 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 #include #include #include using android::StringPiece; namespace aapt { static const char* sDevelopmentSdkCodeName = "O"; static ApiVersion sDevelopmentSdkLevel = 26; static const std::vector> 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}, {0x04d8, SDK_LOLLIPOP_MR1}, {0x04f1, SDK_MARSHMALLOW}, {0x0527, SDK_NOUGAT}, {0x0530, SDK_NOUGAT_MR1}, {0x0568, SDK_O}, }; static bool less_entry_id(const std::pair& p, uint16_t entryId) { return p.first < entryId; } ApiVersion FindAttributeSdkLevel(const ResourceId& id) { if (id.package_id() != 0x01 || id.type_id() != 0x01) { return 0; } auto iter = std::lower_bound(sAttrIdMap.begin(), sAttrIdMap.end(), id.entry_id(), less_entry_id); if (iter == sAttrIdMap.end()) { return SDK_LOLLIPOP_MR1; } return iter->second; } static const std::unordered_map 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}}; ApiVersion 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 GetDevelopmentSdkCodeNameAndVersion() { return std::make_pair(StringPiece(sDevelopmentSdkCodeName), sDevelopmentSdkLevel); } } // namespace aapt