blob: 041cb4fa96cda850a38454286f1ff1311b0c93b9 [file] [log] [blame]
Adam Lesinski6f6ceb72014-11-14 14:48:12 -08001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Adam Lesinski75f3a552015-06-03 14:54:23 -070017#include "SdkConstants.h"
18
19#include <algorithm>
Adam Lesinski6f6ceb72014-11-14 14:48:12 -080020#include <string>
21#include <unordered_map>
Adam Lesinski75f3a552015-06-03 14:54:23 -070022#include <vector>
Adam Lesinski6f6ceb72014-11-14 14:48:12 -080023
Adam Lesinskid5083f62017-01-16 15:07:21 -080024using android::StringPiece;
25
Adam Lesinski6f6ceb72014-11-14 14:48:12 -080026namespace aapt {
27
Adam Lesinskid0f116b2016-07-08 15:00:32 -070028static const char* sDevelopmentSdkCodeName = "O";
Adam Lesinskic744ae82017-05-17 19:28:38 -070029static ApiVersion sDevelopmentSdkLevel = 26;
Adam Lesinskifb6312f2016-06-28 14:40:32 -070030
Adam Lesinskic744ae82017-05-17 19:28:38 -070031static const std::vector<std::pair<uint16_t, ApiVersion>> sAttrIdMap = {
Adam Lesinskicacb28f2016-10-19 12:18:14 -070032 {0x021c, 1},
33 {0x021d, 2},
34 {0x0269, SDK_CUPCAKE},
35 {0x028d, SDK_DONUT},
36 {0x02ad, SDK_ECLAIR},
37 {0x02b3, SDK_ECLAIR_0_1},
38 {0x02b5, SDK_ECLAIR_MR1},
39 {0x02bd, SDK_FROYO},
40 {0x02cb, SDK_GINGERBREAD},
41 {0x0361, SDK_HONEYCOMB},
42 {0x0363, SDK_HONEYCOMB_MR1},
43 {0x0366, SDK_HONEYCOMB_MR2},
44 {0x03a6, SDK_ICE_CREAM_SANDWICH},
45 {0x03ae, SDK_JELLY_BEAN},
46 {0x03cc, SDK_JELLY_BEAN_MR1},
47 {0x03da, SDK_JELLY_BEAN_MR2},
48 {0x03f1, SDK_KITKAT},
49 {0x03f6, SDK_KITKAT_WATCH},
50 {0x04ce, SDK_LOLLIPOP},
Adam Lesinskic744ae82017-05-17 19:28:38 -070051 {0x04d8, SDK_LOLLIPOP_MR1},
52 {0x04f1, SDK_MARSHMALLOW},
53 {0x0527, SDK_NOUGAT},
54 {0x0530, SDK_NOUGAT_MR1},
55 {0x0568, SDK_O},
Adam Lesinski75f3a552015-06-03 14:54:23 -070056};
57
Adam Lesinskic744ae82017-05-17 19:28:38 -070058static bool less_entry_id(const std::pair<uint16_t, ApiVersion>& p, uint16_t entryId) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -070059 return p.first < entryId;
Adam Lesinski75f3a552015-06-03 14:54:23 -070060}
61
Adam Lesinskic744ae82017-05-17 19:28:38 -070062ApiVersion FindAttributeSdkLevel(const ResourceId& id) {
63 if (id.package_id() != 0x01 || id.type_id() != 0x01) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -070064 return 0;
65 }
Adam Lesinskic744ae82017-05-17 19:28:38 -070066 auto iter = std::lower_bound(sAttrIdMap.begin(), sAttrIdMap.end(), id.entry_id(), less_entry_id);
Adam Lesinskicacb28f2016-10-19 12:18:14 -070067 if (iter == sAttrIdMap.end()) {
68 return SDK_LOLLIPOP_MR1;
69 }
70 return iter->second;
Adam Lesinski75f3a552015-06-03 14:54:23 -070071}
72
Adam Lesinskic744ae82017-05-17 19:28:38 -070073static const std::unordered_map<std::string, ApiVersion> sAttrMap = {
Adam Lesinskicacb28f2016-10-19 12:18:14 -070074 {"marqueeRepeatLimit", 2},
75 {"windowNoDisplay", 3},
76 {"backgroundDimEnabled", 3},
77 {"inputType", 3},
78 {"isDefault", 3},
79 {"windowDisablePreview", 3},
80 {"privateImeOptions", 3},
81 {"editorExtras", 3},
82 {"settingsActivity", 3},
83 {"fastScrollEnabled", 3},
84 {"reqTouchScreen", 3},
85 {"reqKeyboardType", 3},
86 {"reqHardKeyboard", 3},
87 {"reqNavigation", 3},
88 {"windowSoftInputMode", 3},
89 {"imeFullscreenBackground", 3},
90 {"noHistory", 3},
91 {"headerDividersEnabled", 3},
92 {"footerDividersEnabled", 3},
93 {"candidatesTextStyleSpans", 3},
94 {"smoothScrollbar", 3},
95 {"reqFiveWayNav", 3},
96 {"keyBackground", 3},
97 {"keyTextSize", 3},
98 {"labelTextSize", 3},
99 {"keyTextColor", 3},
100 {"keyPreviewLayout", 3},
101 {"keyPreviewOffset", 3},
102 {"keyPreviewHeight", 3},
103 {"verticalCorrection", 3},
104 {"popupLayout", 3},
105 {"state_long_pressable", 3},
106 {"keyWidth", 3},
107 {"keyHeight", 3},
108 {"horizontalGap", 3},
109 {"verticalGap", 3},
110 {"rowEdgeFlags", 3},
111 {"codes", 3},
112 {"popupKeyboard", 3},
113 {"popupCharacters", 3},
114 {"keyEdgeFlags", 3},
115 {"isModifier", 3},
116 {"isSticky", 3},
117 {"isRepeatable", 3},
118 {"iconPreview", 3},
119 {"keyOutputText", 3},
120 {"keyLabel", 3},
121 {"keyIcon", 3},
122 {"keyboardMode", 3},
123 {"isScrollContainer", 3},
124 {"fillEnabled", 3},
125 {"updatePeriodMillis", 3},
126 {"initialLayout", 3},
127 {"voiceSearchMode", 3},
128 {"voiceLanguageModel", 3},
129 {"voicePromptText", 3},
130 {"voiceLanguage", 3},
131 {"voiceMaxResults", 3},
132 {"bottomOffset", 3},
133 {"topOffset", 3},
134 {"allowSingleTap", 3},
135 {"handle", 3},
136 {"content", 3},
137 {"animateOnClick", 3},
138 {"configure", 3},
139 {"hapticFeedbackEnabled", 3},
140 {"innerRadius", 3},
141 {"thickness", 3},
142 {"sharedUserLabel", 3},
143 {"dropDownWidth", 3},
144 {"dropDownAnchor", 3},
145 {"imeOptions", 3},
146 {"imeActionLabel", 3},
147 {"imeActionId", 3},
148 {"imeExtractEnterAnimation", 3},
149 {"imeExtractExitAnimation", 3},
150 {"tension", 4},
151 {"extraTension", 4},
152 {"anyDensity", 4},
153 {"searchSuggestThreshold", 4},
154 {"includeInGlobalSearch", 4},
155 {"onClick", 4},
156 {"targetSdkVersion", 4},
157 {"maxSdkVersion", 4},
158 {"testOnly", 4},
159 {"contentDescription", 4},
160 {"gestureStrokeWidth", 4},
161 {"gestureColor", 4},
162 {"uncertainGestureColor", 4},
163 {"fadeOffset", 4},
164 {"fadeDuration", 4},
165 {"gestureStrokeType", 4},
166 {"gestureStrokeLengthThreshold", 4},
167 {"gestureStrokeSquarenessThreshold", 4},
168 {"gestureStrokeAngleThreshold", 4},
169 {"eventsInterceptionEnabled", 4},
170 {"fadeEnabled", 4},
171 {"backupAgent", 4},
172 {"allowBackup", 4},
173 {"glEsVersion", 4},
174 {"queryAfterZeroResults", 4},
175 {"dropDownHeight", 4},
176 {"smallScreens", 4},
177 {"normalScreens", 4},
178 {"largeScreens", 4},
179 {"progressBarStyleInverse", 4},
180 {"progressBarStyleSmallInverse", 4},
181 {"progressBarStyleLargeInverse", 4},
182 {"searchSettingsDescription", 4},
183 {"textColorPrimaryInverseDisableOnly", 4},
184 {"autoUrlDetect", 4},
185 {"resizeable", 4},
186 {"required", 5},
187 {"accountType", 5},
188 {"contentAuthority", 5},
189 {"userVisible", 5},
190 {"windowShowWallpaper", 5},
191 {"wallpaperOpenEnterAnimation", 5},
192 {"wallpaperOpenExitAnimation", 5},
193 {"wallpaperCloseEnterAnimation", 5},
194 {"wallpaperCloseExitAnimation", 5},
195 {"wallpaperIntraOpenEnterAnimation", 5},
196 {"wallpaperIntraOpenExitAnimation", 5},
197 {"wallpaperIntraCloseEnterAnimation", 5},
198 {"wallpaperIntraCloseExitAnimation", 5},
199 {"supportsUploading", 5},
200 {"killAfterRestore", 5},
201 {"restoreNeedsApplication", 5},
202 {"smallIcon", 5},
203 {"accountPreferences", 5},
204 {"textAppearanceSearchResultSubtitle", 5},
205 {"textAppearanceSearchResultTitle", 5},
206 {"summaryColumn", 5},
207 {"detailColumn", 5},
208 {"detailSocialSummary", 5},
209 {"thumbnail", 5},
210 {"detachWallpaper", 5},
211 {"finishOnCloseSystemDialogs", 5},
212 {"scrollbarFadeDuration", 5},
213 {"scrollbarDefaultDelayBeforeFade", 5},
214 {"fadeScrollbars", 5},
215 {"colorBackgroundCacheHint", 5},
216 {"dropDownHorizontalOffset", 5},
217 {"dropDownVerticalOffset", 5},
218 {"quickContactBadgeStyleWindowSmall", 6},
219 {"quickContactBadgeStyleWindowMedium", 6},
220 {"quickContactBadgeStyleWindowLarge", 6},
221 {"quickContactBadgeStyleSmallWindowSmall", 6},
222 {"quickContactBadgeStyleSmallWindowMedium", 6},
223 {"quickContactBadgeStyleSmallWindowLarge", 6},
224 {"author", 7},
225 {"autoStart", 7},
226 {"expandableListViewWhiteStyle", 8},
227 {"installLocation", 8},
228 {"vmSafeMode", 8},
229 {"webTextViewStyle", 8},
230 {"restoreAnyVersion", 8},
231 {"tabStripLeft", 8},
232 {"tabStripRight", 8},
233 {"tabStripEnabled", 8},
234 {"logo", 9},
235 {"xlargeScreens", 9},
236 {"immersive", 9},
237 {"overScrollMode", 9},
238 {"overScrollHeader", 9},
239 {"overScrollFooter", 9},
240 {"filterTouchesWhenObscured", 9},
241 {"textSelectHandleLeft", 9},
242 {"textSelectHandleRight", 9},
243 {"textSelectHandle", 9},
244 {"textSelectHandleWindowStyle", 9},
245 {"popupAnimationStyle", 9},
246 {"screenSize", 9},
247 {"screenDensity", 9},
248 {"allContactsName", 11},
249 {"windowActionBar", 11},
250 {"actionBarStyle", 11},
251 {"navigationMode", 11},
252 {"displayOptions", 11},
253 {"subtitle", 11},
254 {"customNavigationLayout", 11},
255 {"hardwareAccelerated", 11},
256 {"measureWithLargestChild", 11},
257 {"animateFirstView", 11},
258 {"dropDownSpinnerStyle", 11},
259 {"actionDropDownStyle", 11},
260 {"actionButtonStyle", 11},
261 {"showAsAction", 11},
262 {"previewImage", 11},
263 {"actionModeBackground", 11},
264 {"actionModeCloseDrawable", 11},
265 {"windowActionModeOverlay", 11},
266 {"valueFrom", 11},
267 {"valueTo", 11},
268 {"valueType", 11},
269 {"propertyName", 11},
270 {"ordering", 11},
271 {"fragment", 11},
272 {"windowActionBarOverlay", 11},
273 {"fragmentOpenEnterAnimation", 11},
274 {"fragmentOpenExitAnimation", 11},
275 {"fragmentCloseEnterAnimation", 11},
276 {"fragmentCloseExitAnimation", 11},
277 {"fragmentFadeEnterAnimation", 11},
278 {"fragmentFadeExitAnimation", 11},
279 {"actionBarSize", 11},
280 {"imeSubtypeLocale", 11},
281 {"imeSubtypeMode", 11},
282 {"imeSubtypeExtraValue", 11},
283 {"splitMotionEvents", 11},
284 {"listChoiceBackgroundIndicator", 11},
285 {"spinnerMode", 11},
286 {"animateLayoutChanges", 11},
287 {"actionBarTabStyle", 11},
288 {"actionBarTabBarStyle", 11},
289 {"actionBarTabTextStyle", 11},
290 {"actionOverflowButtonStyle", 11},
291 {"actionModeCloseButtonStyle", 11},
292 {"titleTextStyle", 11},
293 {"subtitleTextStyle", 11},
294 {"iconifiedByDefault", 11},
295 {"actionLayout", 11},
296 {"actionViewClass", 11},
297 {"activatedBackgroundIndicator", 11},
298 {"state_activated", 11},
299 {"listPopupWindowStyle", 11},
300 {"popupMenuStyle", 11},
301 {"textAppearanceLargePopupMen", 11},
302 {"textAppearanceSmallPopupMen", 11},
303 {"breadCrumbTitle", 11},
304 {"breadCrumbShortTitle", 11},
305 {"listDividerAlertDialog", 11},
306 {"textColorAlertDialogListItem", 11},
307 {"loopViews", 11},
308 {"dialogTheme", 11},
309 {"alertDialogTheme", 11},
310 {"dividerVertical", 11},
311 {"homeAsUpIndicator", 11},
312 {"enterFadeDuration", 11},
313 {"exitFadeDuration", 11},
314 {"selectableItemBackground", 11},
315 {"autoAdvanceViewId", 11},
316 {"useIntrinsicSizeAsMinimum", 11},
317 {"actionModeCutDrawable", 11},
318 {"actionModeCopyDrawable", 11},
319 {"actionModePasteDrawable", 11},
320 {"textEditPasteWindowLayout", 11},
321 {"textEditNoPasteWindowLayout", 11},
322 {"textIsSelectable", 11},
323 {"windowEnableSplitTouch", 11},
324 {"indeterminateProgressStyle", 11},
325 {"progressBarPadding", 11},
326 {"animationResolution", 11},
327 {"state_accelerated", 11},
328 {"baseline", 11},
329 {"homeLayout", 11},
330 {"opacity", 11},
331 {"alpha", 11},
332 {"transformPivotX", 11},
333 {"transformPivotY", 11},
334 {"translationX", 11},
335 {"translationY", 11},
336 {"scaleX", 11},
337 {"scaleY", 11},
338 {"rotation", 11},
339 {"rotationX", 11},
340 {"rotationY", 11},
341 {"showDividers", 11},
342 {"dividerPadding", 11},
343 {"borderlessButtonStyle", 11},
344 {"dividerHorizontal", 11},
345 {"itemPadding", 11},
346 {"buttonBarStyle", 11},
347 {"buttonBarButtonStyle", 11},
348 {"segmentedButtonStyle", 11},
349 {"staticWallpaperPreview", 11},
350 {"allowParallelSyncs", 11},
351 {"isAlwaysSyncable", 11},
352 {"verticalScrollbarPosition", 11},
353 {"fastScrollAlwaysVisible", 11},
354 {"fastScrollThumbDrawable", 11},
355 {"fastScrollPreviewBackgroundLeft", 11},
356 {"fastScrollPreviewBackgroundRight", 11},
357 {"fastScrollTrackDrawable", 11},
358 {"fastScrollOverlayPosition", 11},
359 {"customTokens", 11},
360 {"nextFocusForward", 11},
361 {"firstDayOfWeek", 11},
362 {"showWeekNumber", 11},
363 {"minDate", 11},
364 {"maxDate", 11},
365 {"shownWeekCount", 11},
366 {"selectedWeekBackgroundColor", 11},
367 {"focusedMonthDateColor", 11},
368 {"unfocusedMonthDateColor", 11},
369 {"weekNumberColor", 11},
370 {"weekSeparatorLineColor", 11},
371 {"selectedDateVerticalBar", 11},
372 {"weekDayTextAppearance", 11},
373 {"dateTextAppearance", 11},
374 {"solidColor", 11},
375 {"spinnersShown", 11},
376 {"calendarViewShown", 11},
377 {"state_multiline", 11},
378 {"detailsElementBackground", 11},
379 {"textColorHighlightInverse", 11},
380 {"textColorLinkInverse", 11},
381 {"editTextColor", 11},
382 {"editTextBackground", 11},
383 {"horizontalScrollViewStyle", 11},
384 {"layerType", 11},
385 {"alertDialogIcon", 11},
386 {"windowMinWidthMajor", 11},
387 {"windowMinWidthMinor", 11},
388 {"queryHint", 11},
389 {"fastScrollTextColor", 11},
390 {"largeHeap", 11},
391 {"windowCloseOnTouchOutside", 11},
392 {"datePickerStyle", 11},
393 {"calendarViewStyle", 11},
394 {"textEditSidePasteWindowLayout", 11},
395 {"textEditSideNoPasteWindowLayout", 11},
396 {"actionMenuTextAppearance", 11},
397 {"actionMenuTextColor", 11},
398 {"textCursorDrawable", 12},
399 {"resizeMode", 12},
400 {"requiresSmallestWidthDp", 12},
401 {"compatibleWidthLimitDp", 12},
402 {"largestWidthLimitDp", 12},
403 {"state_hovered", 13},
404 {"state_drag_can_accept", 13},
405 {"state_drag_hovered", 13},
406 {"stopWithTask", 13},
407 {"switchTextOn", 13},
408 {"switchTextOff", 13},
409 {"switchPreferenceStyle", 13},
410 {"switchTextAppearance", 13},
411 {"track", 13},
412 {"switchMinWidth", 13},
413 {"switchPadding", 13},
414 {"thumbTextPadding", 13},
415 {"textSuggestionsWindowStyle", 13},
416 {"textEditSuggestionItemLayout", 13},
417 {"rowCount", 13},
418 {"rowOrderPreserved", 13},
419 {"columnCount", 13},
420 {"columnOrderPreserved", 13},
421 {"useDefaultMargins", 13},
422 {"alignmentMode", 13},
423 {"layout_row", 13},
424 {"layout_rowSpan", 13},
425 {"layout_columnSpan", 13},
426 {"actionModeSelectAllDrawable", 13},
427 {"isAuxiliary", 13},
428 {"accessibilityEventTypes", 13},
429 {"packageNames", 13},
430 {"accessibilityFeedbackType", 13},
431 {"notificationTimeout", 13},
432 {"accessibilityFlags", 13},
433 {"canRetrieveWindowContent", 13},
434 {"listPreferredItemHeightLarge", 13},
435 {"listPreferredItemHeightSmall", 13},
436 {"actionBarSplitStyle", 13},
437 {"actionProviderClass", 13},
438 {"backgroundStacked", 13},
439 {"backgroundSplit", 13},
440 {"textAllCaps", 13},
441 {"colorPressedHighlight", 13},
442 {"colorLongPressedHighlight", 13},
443 {"colorFocusedHighlight", 13},
444 {"colorActivatedHighlight", 13},
445 {"colorMultiSelectHighlight", 13},
446 {"drawableStart", 13},
447 {"drawableEnd", 13},
448 {"actionModeStyle", 13},
449 {"minResizeWidth", 13},
450 {"minResizeHeight", 13},
451 {"actionBarWidgetTheme", 13},
452 {"uiOptions", 13},
453 {"subtypeLocale", 13},
454 {"subtypeExtraValue", 13},
455 {"actionBarDivider", 13},
456 {"actionBarItemBackground", 13},
457 {"actionModeSplitBackground", 13},
458 {"textAppearanceListItem", 13},
459 {"textAppearanceListItemSmall", 13},
460 {"targetDescriptions", 13},
461 {"directionDescriptions", 13},
462 {"overridesImplicitlyEnabledSubtype", 13},
463 {"listPreferredItemPaddingLeft", 13},
464 {"listPreferredItemPaddingRight", 13},
465 {"requiresFadingEdge", 13},
466 {"publicKey", 13},
467 {"parentActivityName", 16},
468 {"isolatedProcess", 16},
469 {"importantForAccessibility", 16},
470 {"keyboardLayout", 16},
471 {"fontFamily", 16},
472 {"mediaRouteButtonStyle", 16},
473 {"mediaRouteTypes", 16},
474 {"supportsRtl", 17},
475 {"textDirection", 17},
476 {"textAlignment", 17},
477 {"layoutDirection", 17},
478 {"paddingStart", 17},
479 {"paddingEnd", 17},
480 {"layout_marginStart", 17},
481 {"layout_marginEnd", 17},
482 {"layout_toStartOf", 17},
483 {"layout_toEndOf", 17},
484 {"layout_alignStart", 17},
485 {"layout_alignEnd", 17},
486 {"layout_alignParentStart", 17},
487 {"layout_alignParentEnd", 17},
488 {"listPreferredItemPaddingStart", 17},
489 {"listPreferredItemPaddingEnd", 17},
490 {"singleUser", 17},
491 {"presentationTheme", 17},
492 {"subtypeId", 17},
493 {"initialKeyguardLayout", 17},
494 {"widgetCategory", 17},
495 {"permissionGroupFlags", 17},
496 {"labelFor", 17},
497 {"permissionFlags", 17},
498 {"checkedTextViewStyle", 17},
499 {"showOnLockScreen", 17},
500 {"format12Hour", 17},
501 {"format24Hour", 17},
502 {"timeZone", 17},
503 {"mipMap", 18},
504 {"mirrorForRtl", 18},
505 {"windowOverscan", 18},
506 {"requiredForAllUsers", 18},
507 {"indicatorStart", 18},
508 {"indicatorEnd", 18},
509 {"childIndicatorStart", 18},
510 {"childIndicatorEnd", 18},
511 {"restrictedAccountType", 18},
512 {"requiredAccountType", 18},
513 {"canRequestTouchExplorationMode", 18},
514 {"canRequestEnhancedWebAccessibility", 18},
515 {"canRequestFilterKeyEvents", 18},
516 {"layoutMode", 18},
517 {"keySet", 19},
518 {"targetId", 19},
519 {"fromScene", 19},
520 {"toScene", 19},
521 {"transition", 19},
522 {"transitionOrdering", 19},
523 {"fadingMode", 19},
524 {"startDelay", 19},
525 {"ssp", 19},
526 {"sspPrefix", 19},
527 {"sspPattern", 19},
528 {"addPrintersActivity", 19},
529 {"vendor", 19},
530 {"category", 19},
531 {"isAsciiCapable", 19},
532 {"autoMirrored", 19},
533 {"supportsSwitchingToNextInputMethod", 19},
534 {"requireDeviceUnlock", 19},
535 {"apduServiceBanner", 19},
536 {"accessibilityLiveRegion", 19},
537 {"windowTranslucentStatus", 19},
538 {"windowTranslucentNavigation", 19},
539 {"advancedPrintOptionsActivity", 19},
540 {"banner", 20},
541 {"windowSwipeToDismiss", 20},
542 {"isGame", 20},
543 {"allowEmbedded", 20},
544 {"setupActivity", 20},
545 {"fastScrollStyle", 21},
546 {"windowContentTransitions", 21},
547 {"windowContentTransitionManager", 21},
548 {"translationZ", 21},
549 {"tintMode", 21},
550 {"controlX1", 21},
551 {"controlY1", 21},
552 {"controlX2", 21},
553 {"controlY2", 21},
554 {"transitionName", 21},
555 {"transitionGroup", 21},
556 {"viewportWidth", 21},
557 {"viewportHeight", 21},
558 {"fillColor", 21},
559 {"pathData", 21},
560 {"strokeColor", 21},
561 {"strokeWidth", 21},
562 {"trimPathStart", 21},
563 {"trimPathEnd", 21},
564 {"trimPathOffset", 21},
565 {"strokeLineCap", 21},
566 {"strokeLineJoin", 21},
567 {"strokeMiterLimit", 21},
568 {"colorControlNormal", 21},
569 {"colorControlActivated", 21},
570 {"colorButtonNormal", 21},
571 {"colorControlHighlight", 21},
572 {"persistableMode", 21},
573 {"titleTextAppearance", 21},
574 {"subtitleTextAppearance", 21},
575 {"slideEdge", 21},
576 {"actionBarTheme", 21},
577 {"textAppearanceListItemSecondary", 21},
578 {"colorPrimary", 21},
579 {"colorPrimaryDark", 21},
580 {"colorAccent", 21},
581 {"nestedScrollingEnabled", 21},
582 {"windowEnterTransition", 21},
583 {"windowExitTransition", 21},
584 {"windowSharedElementEnterTransition", 21},
585 {"windowSharedElementExitTransition", 21},
586 {"windowAllowReturnTransitionOverlap", 21},
587 {"windowAllowEnterTransitionOverlap", 21},
588 {"sessionService", 21},
589 {"stackViewStyle", 21},
590 {"switchStyle", 21},
591 {"elevation", 21},
592 {"excludeId", 21},
593 {"excludeClass", 21},
594 {"hideOnContentScroll", 21},
595 {"actionOverflowMenuStyle", 21},
596 {"documentLaunchMode", 21},
597 {"maxRecents", 21},
598 {"autoRemoveFromRecents", 21},
599 {"stateListAnimator", 21},
600 {"toId", 21},
601 {"fromId", 21},
602 {"reversible", 21},
603 {"splitTrack", 21},
604 {"targetName", 21},
605 {"excludeName", 21},
606 {"matchOrder", 21},
607 {"windowDrawsSystemBarBackgrounds", 21},
608 {"statusBarColor", 21},
609 {"navigationBarColor", 21},
610 {"contentInsetStart", 21},
611 {"contentInsetEnd", 21},
612 {"contentInsetLeft", 21},
613 {"contentInsetRight", 21},
614 {"paddingMode", 21},
615 {"layout_rowWeight", 21},
616 {"layout_columnWeight", 21},
617 {"translateX", 21},
618 {"translateY", 21},
619 {"selectableItemBackgroundBorderless", 21},
620 {"elegantTextHeight", 21},
621 {"searchKeyphraseId", 21},
622 {"searchKeyphrase", 21},
623 {"searchKeyphraseSupportedLocales", 21},
624 {"windowTransitionBackgroundFadeDuration", 21},
625 {"overlapAnchor", 21},
626 {"progressTint", 21},
627 {"progressTintMode", 21},
628 {"progressBackgroundTint", 21},
629 {"progressBackgroundTintMode", 21},
630 {"secondaryProgressTint", 21},
631 {"secondaryProgressTintMode", 21},
632 {"indeterminateTint", 21},
633 {"indeterminateTintMode", 21},
634 {"backgroundTint", 21},
635 {"backgroundTintMode", 21},
636 {"foregroundTint", 21},
637 {"foregroundTintMode", 21},
638 {"buttonTint", 21},
639 {"buttonTintMode", 21},
640 {"thumbTint", 21},
641 {"thumbTintMode", 21},
642 {"fullBackupOnly", 21},
643 {"propertyXName", 21},
644 {"propertyYName", 21},
645 {"relinquishTaskIdentity", 21},
646 {"tileModeX", 21},
647 {"tileModeY", 21},
648 {"actionModeShareDrawable", 21},
649 {"actionModeFindDrawable", 21},
650 {"actionModeWebSearchDrawable", 21},
651 {"transitionVisibilityMode", 21},
652 {"minimumHorizontalAngle", 21},
653 {"minimumVerticalAngle", 21},
654 {"maximumAngle", 21},
655 {"searchViewStyle", 21},
656 {"closeIcon", 21},
657 {"goIcon", 21},
658 {"searchIcon", 21},
659 {"voiceIcon", 21},
660 {"commitIcon", 21},
661 {"suggestionRowLayout", 21},
662 {"queryBackground", 21},
663 {"submitBackground", 21},
664 {"buttonBarPositiveButtonStyle", 21},
665 {"buttonBarNeutralButtonStyle", 21},
666 {"buttonBarNegativeButtonStyle", 21},
667 {"popupElevation", 21},
668 {"actionBarPopupTheme", 21},
669 {"multiArch", 21},
670 {"touchscreenBlocksFocus", 21},
671 {"windowElevation", 21},
672 {"launchTaskBehindTargetAnimation", 21},
673 {"launchTaskBehindSourceAnimation", 21},
674 {"restrictionType", 21},
675 {"dayOfWeekBackground", 21},
676 {"dayOfWeekTextAppearance", 21},
677 {"headerMonthTextAppearance", 21},
678 {"headerDayOfMonthTextAppearance", 21},
679 {"headerYearTextAppearance", 21},
680 {"yearListItemTextAppearance", 21},
681 {"yearListSelectorColor", 21},
682 {"calendarTextColor", 21},
683 {"recognitionService", 21},
684 {"timePickerStyle", 21},
685 {"timePickerDialogTheme", 21},
686 {"headerTimeTextAppearance", 21},
687 {"headerAmPmTextAppearance", 21},
688 {"numbersTextColor", 21},
689 {"numbersBackgroundColor", 21},
690 {"numbersSelectorColor", 21},
691 {"amPmTextColor", 21},
692 {"amPmBackgroundColor", 21},
693 {"searchKeyphraseRecognitionFlags", 21},
694 {"checkMarkTint", 21},
695 {"checkMarkTintMode", 21},
696 {"popupTheme", 21},
697 {"toolbarStyle", 21},
698 {"windowClipToOutline", 21},
699 {"datePickerDialogTheme", 21},
700 {"showText", 21},
701 {"windowReturnTransition", 21},
702 {"windowReenterTransition", 21},
703 {"windowSharedElementReturnTransition", 21},
704 {"windowSharedElementReenterTransition", 21},
705 {"resumeWhilePausing", 21},
706 {"datePickerMode", 21},
707 {"timePickerMode", 21},
708 {"inset", 21},
709 {"letterSpacing", 21},
710 {"fontFeatureSettings", 21},
711 {"outlineProvider", 21},
712 {"contentAgeHint", 21},
713 {"country", 21},
714 {"windowSharedElementsUseOverlay", 21},
715 {"reparent", 21},
716 {"reparentWithOverlay", 21},
717 {"ambientShadowAlpha", 21},
718 {"spotShadowAlpha", 21},
719 {"navigationIcon", 21},
720 {"navigationContentDescription", 21},
721 {"fragmentExitTransition", 21},
722 {"fragmentEnterTransition", 21},
723 {"fragmentSharedElementEnterTransition", 21},
724 {"fragmentReturnTransition", 21},
725 {"fragmentSharedElementReturnTransition", 21},
726 {"fragmentReenterTransition", 21},
727 {"fragmentAllowEnterTransitionOverlap", 21},
728 {"fragmentAllowReturnTransitionOverlap", 21},
729 {"patternPathData", 21},
730 {"strokeAlpha", 21},
731 {"fillAlpha", 21},
732 {"windowActivityTransitions", 21},
733 {"colorEdgeEffect", 21}};
Adam Lesinski6f6ceb72014-11-14 14:48:12 -0800734
Adam Lesinskic744ae82017-05-17 19:28:38 -0700735ApiVersion FindAttributeSdkLevel(const ResourceName& name) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700736 if (name.package != "android" && name.type != ResourceType::kAttr) {
737 return 0;
738 }
Adam Lesinski75f3a552015-06-03 14:54:23 -0700739
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700740 auto iter = sAttrMap.find(name.entry);
741 if (iter != sAttrMap.end()) {
742 return iter->second;
743 }
744 return SDK_LOLLIPOP_MR1;
Adam Lesinski6f6ceb72014-11-14 14:48:12 -0800745}
746
Adam Lesinskic744ae82017-05-17 19:28:38 -0700747std::pair<StringPiece, ApiVersion> GetDevelopmentSdkCodeNameAndVersion() {
748 return std::make_pair(StringPiece(sDevelopmentSdkCodeName), sDevelopmentSdkLevel);
Adam Lesinskifb6312f2016-06-28 14:40:32 -0700749}
750
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700751} // namespace aapt