diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2012-03-26 14:06:56 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-26 14:06:56 -0700 |
commit | 0adcd07ccb07ffde93f36c2b42096dacac98ae26 (patch) | |
tree | 040040fd8144337f604428e8763635c2e9604492 /core/java | |
parent | 9d4b8811c1aba7cb592d5bacba67f793043a7219 (diff) | |
parent | 22ab7751d47aa9d1e07e8d70706dcf30dac3aae0 (diff) | |
download | frameworks_base-0adcd07ccb07ffde93f36c2b42096dacac98ae26.zip frameworks_base-0adcd07ccb07ffde93f36c2b42096dacac98ae26.tar.gz frameworks_base-0adcd07ccb07ffde93f36c2b42096dacac98ae26.tar.bz2 |
Merge "Improve View layoutDirection resolution"
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/view/View.java | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 49eca36..f769e96 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -4954,7 +4954,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal @ViewDebug.IntToString(from = LAYOUT_DIRECTION_RTL, to = "RESOLVED_DIRECTION_RTL") }) public int getResolvedLayoutDirection() { - resolveLayoutDirectionIfNeeded(); + // The layout diretion will be resolved only if needed + if ((mPrivateFlags2 & LAYOUT_DIRECTION_RESOLVED) != LAYOUT_DIRECTION_RESOLVED) { + resolveLayoutDirection(); + } return ((mPrivateFlags2 & LAYOUT_DIRECTION_RESOLVED_RTL) == LAYOUT_DIRECTION_RESOLVED_RTL) ? LAYOUT_DIRECTION_RTL : LAYOUT_DIRECTION_LTR; } @@ -9831,7 +9834,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal jumpDrawablesToCurrentState(); // Order is important here: LayoutDirection MUST be resolved before Padding // and TextDirection - resolveLayoutDirectionIfNeeded(); + resolveLayoutDirection(); resolvePadding(); resolveTextDirection(); if (isFocused()) { @@ -9862,31 +9865,24 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal /** * Resolve and cache the layout direction. LTR is set initially. This is implicitly supposing * that the parent directionality can and will be resolved before its children. + * Will call {@link View#onResolvedLayoutDirectionChanged} when resolution is done. */ - private void resolveLayoutDirectionIfNeeded() { - // Do not resolve if it is not needed - if ((mPrivateFlags2 & LAYOUT_DIRECTION_RESOLVED) == LAYOUT_DIRECTION_RESOLVED) return; - + public void resolveLayoutDirection() { // Clear any previous layout direction resolution mPrivateFlags2 &= ~LAYOUT_DIRECTION_RESOLVED_MASK; // 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 instanceof ViewGroup) { + if (canResolveLayoutDirection()) { 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; } + } else { + // Nothing to do, LTR by default } break; case LAYOUT_DIRECTION_RTL: @@ -9989,7 +9985,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal public boolean canResolveLayoutDirection() { switch (getLayoutDirection()) { case LAYOUT_DIRECTION_INHERIT: - return (mParent != null); + return (mParent != null) && (mParent instanceof ViewGroup); default: return true; } @@ -14571,7 +14567,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal * {@link #TEXT_DIRECTION_LOCALE}, */ public int getResolvedTextDirection() { - // The text direction is not inherited so return it back + // The text direction will be resolved only if needed if ((mPrivateFlags2 & TEXT_DIRECTION_RESOLVED) != TEXT_DIRECTION_RESOLVED) { resolveTextDirection(); } |