diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2013-11-04 22:00:22 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-11-04 22:00:22 -0800 |
commit | 93c9093a32876f97a3c6c1a70538e650f3d02ec1 (patch) | |
tree | c4ab28200d6d4ef3b926616cd52d2e5e7ed16788 | |
parent | 49d68621837a7895479a819526553acb55b7ab7c (diff) | |
parent | 641bac8e21673a2d526b9c0ccf28d5fd08bd6994 (diff) | |
download | frameworks_base-93c9093a32876f97a3c6c1a70538e650f3d02ec1.zip frameworks_base-93c9093a32876f97a3c6c1a70538e650f3d02ec1.tar.gz frameworks_base-93c9093a32876f97a3c6c1a70538e650f3d02ec1.tar.bz2 |
am 641bac8e: am 073041c3: am f48bcd5b: Merge "Fix bug #11256076 Spinner text is too close from the opening triangle in RTL Locales" into klp-dev
* commit '641bac8e21673a2d526b9c0ccf28d5fd08bd6994':
Fix bug #11256076 Spinner text is too close from the opening triangle in RTL Locales
-rw-r--r-- | core/java/android/view/View.java | 29 | ||||
-rw-r--r-- | graphics/java/android/graphics/drawable/DrawableContainer.java | 31 |
2 files changed, 51 insertions, 9 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index d5520b4..8689608 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3196,6 +3196,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ private static final int UNDEFINED_PADDING = Integer.MIN_VALUE; + private boolean mUseBackgroundPadding = false; + /** * @hide */ @@ -12276,12 +12278,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (!isTextAlignmentResolved()) { resolveTextAlignment(); } - if (!isPaddingResolved()) { - resolvePadding(); - } + // Should resolve Drawables before Padding because we need the layout direction of the + // Drawable to correctly resolve Padding. if (!isDrawablesResolved()) { resolveDrawables(); } + if (!isPaddingResolved()) { + resolvePadding(); + } onRtlPropertiesChanged(getLayoutDirection()); return true; } @@ -12484,6 +12488,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // If start / end padding are defined, they will be resolved (hence overriding) to // left / right or right / left depending on the resolved layout direction. // If start / end padding are not defined, use the left / right ones. + if (mBackground != null && mUseBackgroundPadding) { + Rect padding = sThreadLocal.get(); + if (padding == null) { + padding = new Rect(); + sThreadLocal.set(padding); + } + mBackground.getPadding(padding); + mUserPaddingLeftInitial = padding.left; + mUserPaddingRightInitial = padding.right; + } switch (resolvedLayoutDirection) { case LAYOUT_DIRECTION_RTL: if (mUserPaddingStart != UNDEFINED_PADDING) { @@ -15479,6 +15493,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mUserPaddingRightInitial = padding.right; internalSetPadding(padding.left, padding.top, padding.right, padding.bottom); } + mUseBackgroundPadding = true; + } else { + mUseBackgroundPadding = false; } // Compare the minimum sizes of the old Drawable and the new. If there isn't an old or @@ -15504,6 +15521,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /* Remove the background */ mBackground = null; + mUseBackgroundPadding = false; + if ((mPrivateFlags & PFLAG_ONLY_DRAWS_BACKGROUND) != 0) { /* * This view ONLY drew the background before and we're removing @@ -15575,6 +15594,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mUserPaddingLeftInitial = left; mUserPaddingRightInitial = right; + mUseBackgroundPadding = false; + internalSetPadding(left, top, right, bottom); } @@ -15661,6 +15682,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mUserPaddingStart = start; mUserPaddingEnd = end; + mUseBackgroundPadding = false; + switch(getLayoutDirection()) { case LAYOUT_DIRECTION_RTL: mUserPaddingLeftInitial = end; diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java index e350e8d..60e2376 100644 --- a/graphics/java/android/graphics/drawable/DrawableContainer.java +++ b/graphics/java/android/graphics/drawable/DrawableContainer.java @@ -23,6 +23,7 @@ import android.graphics.Insets; import android.graphics.PixelFormat; import android.graphics.Rect; import android.os.SystemClock; +import android.util.LayoutDirection; import android.util.SparseArray; /** @@ -59,6 +60,8 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { private long mExitAnimationEnd; private Drawable mLastDrawable; + private Insets mInsets; + // overrides from Drawable @Override @@ -78,18 +81,30 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { | mDrawableContainerState.mChildrenChangingConfigurations; } + private boolean needsMirroring() { + return isAutoMirrored() && getLayoutDirection() == LayoutDirection.RTL; + } + @Override public boolean getPadding(Rect padding) { final Rect r = mDrawableContainerState.getConstantPadding(); + boolean result = true; if (r != null) { padding.set(r); - return true; - } - if (mCurrDrawable != null) { - return mCurrDrawable.getPadding(padding); } else { - return super.getPadding(padding); + if (mCurrDrawable != null) { + result = mCurrDrawable.getPadding(padding); + } else { + result = super.getPadding(padding); + } } + if (needsMirroring()) { + final int left = padding.left; + final int right = padding.right; + padding.left = right; + padding.right = left; + } + return result; } /** @@ -97,7 +112,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { */ @Override public Insets getOpticalInsets() { - return (mCurrDrawable == null) ? Insets.NONE : mCurrDrawable.getOpticalInsets(); + return mInsets; } @Override @@ -334,6 +349,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { mCurrDrawable = d; mCurIndex = idx; if (d != null) { + mInsets = d.getOpticalInsets(); d.mutate(); if (mDrawableContainerState.mEnterFadeDuration > 0) { mEnterAnimationEnd = now + mDrawableContainerState.mEnterFadeDuration; @@ -348,9 +364,12 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { d.setBounds(getBounds()); d.setLayoutDirection(getLayoutDirection()); d.setAutoMirrored(mDrawableContainerState.mAutoMirrored); + } else { + mInsets = Insets.NONE; } } else { mCurrDrawable = null; + mInsets = Insets.NONE; mCurIndex = -1; } |