diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/PropertyMetadata.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/PropertyMetadata.java | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/PropertyMetadata.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/PropertyMetadata.java new file mode 100644 index 000000000..b230aa99d --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/properties/PropertyMetadata.java @@ -0,0 +1,329 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * 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. + */ +package com.android.ide.eclipse.adt.internal.editors.layout.properties; + +import static com.android.SdkConstants.ATTR_CONTENT_DESCRIPTION; +import static com.android.SdkConstants.ATTR_HINT; +import static com.android.SdkConstants.ATTR_TEXT; + +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; + +import java.util.HashSet; +import java.util.Set; + +/** Extra metadata about properties not available from the descriptors (yet) */ +class PropertyMetadata { + static boolean isAdvanced(@NonNull String name) { + return sAdvanced.contains(name); + } + + static boolean isPreferred(@NonNull String name) { + return sPreferred.contains(name); + } + + @Nullable + static String getCategory(@NonNull String name) { + //return sCategories.get(name); + assert false : "Disabled to save memory since this method is not currently used."; + return null; + } + + private static final int ADVANCED_MAP_SIZE = 134; + private static final Set<String> sAdvanced = new HashSet<String>(ADVANCED_MAP_SIZE); + static { + // This metadata about which attributes are "advanced" was generated as follows: + // First, I ran the sdk/attribute_stats project with the --list argument to dump out + // *all* referenced XML attributes found in layouts, run against a bunch of + // sample Android code (development/samples, packages/apps, vendor, etc. + // + // Then I iterated over the LayoutDescriptors' ViewElementDescriptors' + // AttributeDescriptors, and basically diffed the two: any attribute descriptor name + // which was *not* found in any of the representative layouts is added here + // as an advanced property. + // + // Then I manually edited in some attributes that were referenced in the sample + // layouts but which I still consider to be advanced: + // -- nothing right now + + // I also manually *removed* some entries from the below list: + // drawableBottom (the others, drawableTop, drawableLeft and drawableRight were all + // NOT on the list so keep bottom off for symmetry) + // rating (useful when you deal with a RatingsBar component) + + + // Automatically generated, see above: + sAdvanced.add("alwaysDrawnWithCache"); + sAdvanced.add("animationCache"); + sAdvanced.add("animationDuration"); + sAdvanced.add("animationResolution"); + sAdvanced.add("baseline"); + sAdvanced.add("bufferType"); + sAdvanced.add("calendarViewShown"); + sAdvanced.add("completionHint"); + sAdvanced.add("completionHintView"); + sAdvanced.add("completionThreshold"); + sAdvanced.add("cursorVisible"); + sAdvanced.add("dateTextAppearance"); + sAdvanced.add("dial"); + sAdvanced.add("digits"); + sAdvanced.add("disableChildrenWhenDisabled"); + sAdvanced.add("disabledAlpha"); + sAdvanced.add("drawableAlpha"); + sAdvanced.add("drawableEnd"); + sAdvanced.add("drawableStart"); + sAdvanced.add("drawingCacheQuality"); + sAdvanced.add("dropDownAnchor"); + sAdvanced.add("dropDownHeight"); + sAdvanced.add("dropDownHorizontalOffset"); + sAdvanced.add("dropDownSelector"); + sAdvanced.add("dropDownVerticalOffset"); + sAdvanced.add("dropDownWidth"); + sAdvanced.add("editorExtras"); + sAdvanced.add("ems"); + sAdvanced.add("endYear"); + sAdvanced.add("eventsInterceptionEnabled"); + sAdvanced.add("fadeDuration"); + sAdvanced.add("fadeEnabled"); + sAdvanced.add("fadeOffset"); + sAdvanced.add("fadeScrollbars"); + sAdvanced.add("filterTouchesWhenObscured"); + sAdvanced.add("firstDayOfWeek"); + sAdvanced.add("flingable"); + sAdvanced.add("focusedMonthDateColor"); + sAdvanced.add("foregroundInsidePadding"); + sAdvanced.add("format"); + sAdvanced.add("gestureColor"); + sAdvanced.add("gestureStrokeAngleThreshold"); + sAdvanced.add("gestureStrokeLengthThreshold"); + sAdvanced.add("gestureStrokeSquarenessThreshold"); + sAdvanced.add("gestureStrokeType"); + sAdvanced.add("gestureStrokeWidth"); + sAdvanced.add("hand_hour"); + sAdvanced.add("hand_minute"); + sAdvanced.add("hapticFeedbackEnabled"); + sAdvanced.add("id"); + sAdvanced.add("imeActionId"); + sAdvanced.add("imeActionLabel"); + sAdvanced.add("indeterminateDrawable"); + sAdvanced.add("indeterminateDuration"); + sAdvanced.add("inputMethod"); + sAdvanced.add("interpolator"); + sAdvanced.add("isScrollContainer"); + sAdvanced.add("keepScreenOn"); + sAdvanced.add("layerType"); + sAdvanced.add("layoutDirection"); + sAdvanced.add("maxDate"); + sAdvanced.add("minDate"); + sAdvanced.add("mode"); + sAdvanced.add("numeric"); + sAdvanced.add("paddingEnd"); + sAdvanced.add("paddingStart"); + sAdvanced.add("persistentDrawingCache"); + sAdvanced.add("phoneNumber"); + sAdvanced.add("popupBackground"); + sAdvanced.add("popupPromptView"); + sAdvanced.add("privateImeOptions"); + sAdvanced.add("quickContactWindowSize"); + //sAdvanced.add("rating"); + sAdvanced.add("requiresFadingEdge"); + sAdvanced.add("rotation"); + sAdvanced.add("rotationX"); + sAdvanced.add("rotationY"); + sAdvanced.add("saveEnabled"); + sAdvanced.add("scaleX"); + sAdvanced.add("scaleY"); + sAdvanced.add("scrollX"); + sAdvanced.add("scrollY"); + sAdvanced.add("scrollbarAlwaysDrawHorizontalTrack"); + sAdvanced.add("scrollbarDefaultDelayBeforeFade"); + sAdvanced.add("scrollbarFadeDuration"); + sAdvanced.add("scrollbarSize"); + sAdvanced.add("scrollbarThumbHorizontal"); + sAdvanced.add("scrollbarThumbVertical"); + sAdvanced.add("scrollbarTrackHorizontal"); + sAdvanced.add("scrollbarTrackVertical"); + sAdvanced.add("secondaryProgress"); + sAdvanced.add("selectedDateVerticalBar"); + sAdvanced.add("selectedWeekBackgroundColor"); + sAdvanced.add("selectionDivider"); + sAdvanced.add("selectionDividerHeight"); + sAdvanced.add("showWeekNumber"); + sAdvanced.add("shownWeekCount"); + sAdvanced.add("solidColor"); + sAdvanced.add("soundEffectsEnabled"); + sAdvanced.add("spinnerMode"); + sAdvanced.add("spinnersShown"); + sAdvanced.add("startYear"); + sAdvanced.add("switchMinWidth"); + sAdvanced.add("switchPadding"); + sAdvanced.add("switchTextAppearance"); + sAdvanced.add("textColorHighlight"); + sAdvanced.add("textCursorDrawable"); + sAdvanced.add("textDirection"); + sAdvanced.add("textEditNoPasteWindowLayout"); + sAdvanced.add("textEditPasteWindowLayout"); + sAdvanced.add("textEditSideNoPasteWindowLayout"); + sAdvanced.add("textEditSidePasteWindowLayout"); + sAdvanced.add("textEditSuggestionItemLayout"); + sAdvanced.add("textIsSelectable"); + sAdvanced.add("textOff"); + sAdvanced.add("textOn"); + sAdvanced.add("textScaleX"); + sAdvanced.add("textSelectHandle"); + sAdvanced.add("textSelectHandleLeft"); + sAdvanced.add("textSelectHandleRight"); + sAdvanced.add("thumbOffset"); + sAdvanced.add("thumbTextPadding"); + sAdvanced.add("tint"); + sAdvanced.add("track"); + sAdvanced.add("transformPivotX"); + sAdvanced.add("transformPivotY"); + sAdvanced.add("translationX"); + sAdvanced.add("translationY"); + sAdvanced.add("uncertainGestureColor"); + sAdvanced.add("unfocusedMonthDateColor"); + sAdvanced.add("unselectedAlpha"); + sAdvanced.add("verticalScrollbarPosition"); + sAdvanced.add("weekDayTextAppearance"); + sAdvanced.add("weekNumberColor"); + sAdvanced.add("weekSeparatorLineColor"); + + assert sAdvanced.size() == ADVANCED_MAP_SIZE : sAdvanced.size(); + + } + + private static final int PREFERRED_MAP_SIZE = 7; + private static final Set<String> sPreferred = new HashSet<String>(PREFERRED_MAP_SIZE); + static { + // Manual registrations of attributes that should be treated as preferred if + // they are available on a widget even if they don't show up in the top 10% of + // usages (which the view metadata provides) + sPreferred.add(ATTR_TEXT); + sPreferred.add(ATTR_CONTENT_DESCRIPTION); + sPreferred.add(ATTR_HINT); + sPreferred.add("indeterminate"); + sPreferred.add("progress"); + sPreferred.add("rating"); + sPreferred.add("max"); + assert sPreferred.size() == PREFERRED_MAP_SIZE : sPreferred.size(); + } + + /* + private static final int CATEGORY_MAP_SIZE = 62; + private static final Map<String, String> sCategories = + new HashMap<String, String>(CATEGORY_MAP_SIZE); + static { + sCategories.put("requiresFadingEdge", "Scrolling"); + sCategories.put("fadingEdgeLength", "Scrolling"); + sCategories.put("scrollbarSize", "Scrolling"); + sCategories.put("scrollbarThumbVertical", "Scrolling"); + sCategories.put("scrollbarThumbHorizontal", "Scrolling"); + sCategories.put("scrollbarTrackHorizontal", "Scrolling"); + sCategories.put("scrollbarTrackVertical", "Scrolling"); + sCategories.put("scrollbarAlwaysDrawHorizontalTrack", "Scrolling"); + sCategories.put("scrollbarAlwaysDrawVerticalTrack", "Scrolling"); + sCategories.put("scrollViewStyle", "Scrolling"); + sCategories.put("scrollbars", "Scrolling"); + sCategories.put("scrollingCache", "Scrolling"); + sCategories.put("scrollHorizontally", "Scrolling"); + sCategories.put("scrollbarFadeDuration", "Scrolling"); + sCategories.put("scrollbarDefaultDelayBeforeFade", "Scrolling"); + sCategories.put("fastScrollEnabled", "Scrolling"); + sCategories.put("smoothScrollbar", "Scrolling"); + sCategories.put("isScrollContainer", "Scrolling"); + sCategories.put("fadeScrollbars", "Scrolling"); + sCategories.put("overScrollMode", "Scrolling"); + sCategories.put("overScrollHeader", "Scrolling"); + sCategories.put("overScrollFooter", "Scrolling"); + sCategories.put("verticalScrollbarPosition", "Scrolling"); + sCategories.put("fastScrollAlwaysVisible", "Scrolling"); + sCategories.put("fastScrollThumbDrawable", "Scrolling"); + sCategories.put("fastScrollPreviewBackgroundLeft", "Scrolling"); + sCategories.put("fastScrollPreviewBackgroundRight", "Scrolling"); + sCategories.put("fastScrollTrackDrawable", "Scrolling"); + sCategories.put("fastScrollOverlayPosition", "Scrolling"); + sCategories.put("horizontalScrollViewStyle", "Scrolling"); + sCategories.put("fastScrollTextColor", "Scrolling"); + sCategories.put("scrollbarSize", "Scrolling"); + sCategories.put("scrollbarSize", "Scrolling"); + sCategories.put("scrollbarSize", "Scrolling"); + sCategories.put("scrollbarSize", "Scrolling"); + sCategories.put("scrollbarSize", "Scrolling"); + + // TODO: All the styles: radioButtonStyle, ratingBarStyle, progressBarStyle, ... + + sCategories.put("focusable", "Focus"); + sCategories.put("focusableInTouchMode", "Focus"); + sCategories.put("nextFocusLeft", "Focus"); + sCategories.put("nextFocusRight", "Focus"); + sCategories.put("nextFocusUp", "Focus"); + sCategories.put("nextFocusDown", "Focus"); + sCategories.put("descendantFocusability", "Focus"); + sCategories.put("selectAllOnFocus", "Focus"); + sCategories.put("nextFocusForward", "Focus"); + sCategories.put("colorFocusedHighlight", "Focus"); + + sCategories.put("rotation", "Transforms"); + sCategories.put("scrollX", "Transforms"); + sCategories.put("scrollY", "Transforms"); + sCategories.put("rotationX", "Transforms"); + sCategories.put("rotationY", "Transforms"); + sCategories.put("transformPivotX", "Transforms"); + sCategories.put("transformPivotY", "Transforms"); + sCategories.put("translationX", "Transforms"); + sCategories.put("translationY", "Transforms"); + sCategories.put("scaleX", "Transforms"); + sCategories.put("scaleY", "Transforms"); + + sCategories.put("width", "Size"); + sCategories.put("height", "Size"); + sCategories.put("minWidth", "Size"); + sCategories.put("minHeight", "Size"); + + sCategories.put("longClickable", "Clicks"); + sCategories.put("onClick", "Clicks"); + sCategories.put("clickable", "Clicks"); + sCategories.put("hapticFeedbackEnabled", "Clicks"); + + sCategories.put("duplicateParentState", "State"); + sCategories.put("addStatesFromChildren", "State"); + + assert sCategories.size() == CATEGORY_MAP_SIZE : sCategories.size(); + } + */ + +// private static final int PRIO_CLZ_LAYOUT = 1000; +// private static final int PRIO_CLZ_TEXT = 2000; +// private static final int PRIO_CLZ_DRAWABLE = 3000; +// private static final int PRIO_CLZ_ANIMATION = 4000; +// private static final int PRIO_CLZ_FOCUS = 5000; +// +// private static final int PRIORITY_MAP_SIZE = 100; +// private static final Map<String, Integer> sPriorities = +// new HashMap<String, Integer>(PRIORITY_MAP_SIZE); +// static { +// // TODO: I should put all the properties roughly based on their original order: this +// // will correspond to the rough order they came in with +// // TODO: How can I make similar complex properties show up adjacent; e.g. min and max +// sPriorities.put("min", PRIO_CLZ_LAYOUT); +// sPriorities.put("max", PRIO_CLZ_LAYOUT); +// +// assert sPriorities.size() == PRIORITY_MAP_SIZE : sPriorities.size(); +// } + + // TODO: Emit metadata into a file +} |