/* * 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 namespace aapt { static const char* sDevelopmentSdkCodeName = "O"; static int 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 }, }; static bool lessEntryId(const std::pair& 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 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 getDevelopmentSdkCodeNameAndVersion() { return std::make_pair(StringPiece(sDevelopmentSdkCodeName), sDevelopmentSdkLevel); } } // namespace aapt