diff options
Diffstat (limited to 'lint')
3 files changed, 45 insertions, 0 deletions
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/RequiredAttributeDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/RequiredAttributeDetector.java index 8cb2c42..9fe8440 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/RequiredAttributeDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/RequiredAttributeDetector.java @@ -17,7 +17,9 @@ package com.android.tools.lint.checks; import static com.android.SdkConstants.ANDROID_NS_NAME_PREFIX; +import static com.android.SdkConstants.ANDROID_PREFIX; import static com.android.SdkConstants.ANDROID_STYLE_RESOURCE_PREFIX; +import static com.android.SdkConstants.ANDROID_THEME_PREFIX; import static com.android.SdkConstants.ANDROID_URI; import static com.android.SdkConstants.ATTR_LAYOUT; import static com.android.SdkConstants.ATTR_LAYOUT_HEIGHT; @@ -161,12 +163,41 @@ public class RequiredAttributeDetector extends LayoutDetector implements Detecto } private boolean isSizeStyle(String style, Set<String> sizeStyles) { + if (isFrameworkSizeStyle(style)) { + return true; + } if (sizeStyles == null) { return false; } return isSizeStyle(stripStylePrefix(style), sizeStyles, 0); } + private boolean isFrameworkSizeStyle(String style) { + // A few attributes + if (!(style.startsWith(ANDROID_THEME_PREFIX) || style.startsWith(ANDROID_PREFIX))) { + return false; + } + + // The styles Widget.TextView.ListSeparator (and several theme variations, such as + // Widget.Holo.TextView.ListSeparator, Widget.Holo.Light.TextView.ListSeparator, etc) + // define layout_width and layout_height. + // These are exposed through the listSeparatorTextViewStyle style. + if (style.equals("?android:attr/listSeparatorTextViewStyle")) { //$NON-NLS-1$ + return true; + } + + // It's also set on Widget.QuickContactBadge and Widget.QuickContactBadgeSmall + // These are exposed via a handful of attributes with a common prefix + if (style.startsWith("?android:attr/quickContactBadgeStyle")) { //$NON-NLS-1$ + return true; + } + + // Finally, the styles are set on MediaButton and Widget.Holo.Tab (and + // Widget.Holo.Light.Tab) but these are not exposed via attributes. + + return false; + } + private boolean isSizeStyle( @NonNull String style, @NonNull Set<String> sizeStyles, int depth) { diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/RequiredAttributeDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/RequiredAttributeDetectorTest.java index 3bae4d7..1e3b660 100644 --- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/RequiredAttributeDetectorTest.java +++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/RequiredAttributeDetectorTest.java @@ -91,4 +91,15 @@ public class RequiredAttributeDetectorTest extends AbstractCheckTest { "res/layout/edit_type.xml" )); } + + public void testFrameworkStyles() throws Exception { + // See http://code.google.com/p/android/issues/detail?id=38958 + assertEquals( + "No warnings.", + + lintProject( + "res/layout/listseparator.xml" + )); + } + } diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/listseparator.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/listseparator.xml new file mode 100644 index 0000000..ac50ff7 --- /dev/null +++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/listseparator.xml @@ -0,0 +1,3 @@ +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@id/text1" + style="?android:attr/listSeparatorTextViewStyle" /> |