OSDN Git Service

Fix bug #5025936 TableLayout layout direction resolution is broken
authorFabrice Di Meglio <fdimeglio@google.com>
Wed, 13 Jul 2011 19:47:36 +0000 (12:47 -0700)
committerFabrice Di Meglio <fdimeglio@google.com>
Wed, 13 Jul 2011 21:15:35 +0000 (14:15 -0700)
- check is the parent's view can do resolution when there is inheritance

Change-Id: Ic21d4ee761982ee219229a95f170b6bf2e596b02

api/current.txt
core/java/android/view/View.java

index 2923805..40ef6cf 100644 (file)
@@ -22050,6 +22050,7 @@ package android.view {
     method public void buildDrawingCache();
     method public void buildDrawingCache(boolean);
     method public void buildLayer();
+    method protected boolean canResolveLayoutDirection();
     method public boolean canScrollHorizontally(int);
     method public boolean canScrollVertically(int);
     method public void cancelLongPress();
index 74dc100..8cd683e 100644 (file)
@@ -9066,11 +9066,20 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
         // Set resolved depending on layout direction
         switch (getLayoutDirection()) {
             case LAYOUT_DIRECTION_INHERIT:
+                // We cannot do the resolution if there is no parent
+                if (mParent == null) return;
+
                 // If this is root view, no need to look at parent's layout dir.
-                if (mParent != null &&
-                        mParent instanceof ViewGroup &&
-                        ((ViewGroup) mParent).getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) {
-                    mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
+                if (mParent instanceof ViewGroup) {
+                    ViewGroup viewGroup = ((ViewGroup) mParent);
+
+                    // Check if the parent view group can resolve
+                    if (! viewGroup.canResolveLayoutDirection()) {
+                        return;
+                    }
+                    if (viewGroup.getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) {
+                        mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
+                    }
                 }
                 break;
             case LAYOUT_DIRECTION_RTL:
@@ -9132,6 +9141,15 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit
         recomputePadding();
     }
 
+    protected boolean canResolveLayoutDirection() {
+        switch (getLayoutDirection()) {
+            case LAYOUT_DIRECTION_INHERIT:
+                return (mParent != null);
+            default:
+                return true;
+        }
+    }
+
     /**
      * Reset the resolved layout direction.
      *