OSDN Git Service

Fix the MergeRootFrameLayout rule by checking the presence of padding.
authorRomain Guy <romainguy@android.com>
Wed, 7 Oct 2009 19:31:17 +0000 (12:31 -0700)
committerRomain Guy <romainguy@android.com>
Wed, 7 Oct 2009 19:31:17 +0000 (12:31 -0700)
Change-Id: I3a8b257025e74f6899233d9b99f7f86b5675e997

tools/layoutopt/libs/uix/src/com/android/layoutopt/uix/groovy/LayoutAnalysisCategory.java
tools/layoutopt/libs/uix/src/resources/rules/MergeRootFrameLayout.rule

index e2d8c35..a70086d 100644 (file)
@@ -35,6 +35,11 @@ import org.w3c.dom.Element;
  * to {@link com.android.layoutopt.uix.LayoutAnalysis} and {@link org.w3c.dom.Node}.
  */
 public class LayoutAnalysisCategory {
+    private static final String ANDROID_PADDING = "android:padding";
+    private static final String ANDROID_PADDING_LEFT = "android:paddingLeft";
+    private static final String ANDROID_PADDING_TOP = "android:paddingTop";
+    private static final String ANDROID_PADDING_RIGHT = "android:paddingRight";
+    private static final String ANDROID_PADDING_BOTTOM = "android:paddingBottom";
     private static final String ANDROID_LAYOUT_WIDTH = "android:layout_width";
     private static final String ANDROID_LAYOUT_HEIGHT = "android:layout_height";
     private static final String VALUE_FILL_PARENT = "fill_parent";
@@ -98,8 +103,20 @@ public class LayoutAnalysisCategory {
                 node.getUserData(XmlDocumentBuilder.NODE_END_LINE);
         return data == null ? -1 : (Integer) data;
     }
-    
-    
+
+    /**
+     * xmlNode.hasPadding()
+     * 
+     * @return True if the node has one ore more padding attributes.
+     */
+    public static boolean hasPadding(Element element) {
+        return element.getAttribute(ANDROID_PADDING).length() > 0 ||
+                element.getAttribute(ANDROID_PADDING_LEFT).length() > 0 ||
+                element.getAttribute(ANDROID_PADDING_TOP).length() > 0 ||
+                element.getAttribute(ANDROID_PADDING_BOTTOM).length() > 0 ||
+                element.getAttribute(ANDROID_PADDING_RIGHT).length() > 0;
+    }
+
     /**
      * Returns whether this node's width is fill_parent.
      */
index 2221036..d3fc3d9 100644 (file)
@@ -8,9 +8,11 @@
 // - The node is a FrameLayout
 // - The node is fill_parent in both orientation *or* it has no layout_gravity
 // - The node does not have a background nor a foreground
+// - The node does not have padding
 
 if (node.isRoot() && node.is("FrameLayout") && !node.'@android:background' &&
         !node.'@android:foreground' && ((node.isWidthFillParent() &&
-                node.isHeightFillParent()) || !node.'@android:layout_gravity')) {
+                node.isHeightFillParent()) || !node.'@android:layout_gravity') &&
+        !node.hasPadding()) {
     analysis << "The root-level <FrameLayout/> can be replaced with <merge/>"
 }