| /* |
| * 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> |
| |
| using android::StringPiece; |
| |
| 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 less_entry_id(const std::pair<uint16_t, size_t>& p, |
| uint16_t entryId) { |
| return p.first < entryId; |
| } |
| |
| size_t 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<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 |