From 731ba6649a40529657aa68f93e6febe7d98b4f3b Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Fri, 10 May 2013 18:08:28 -0700 Subject: [PATCH] Fix bug #8858012 layer-list's bitmap item's start/end gravity is incorrect on RTL under certain conditions - set correct layout direction for Drawable Change-Id: Ic8968acadbc7c9aa0bb68dd4dfbe09aa4e7cfa62 --- .../graphics/drawable/AnimatedRotateDrawable.java | 1 + .../java/android/graphics/drawable/ClipDrawable.java | 1 + .../android/graphics/drawable/DrawableContainer.java | 2 ++ .../java/android/graphics/drawable/InsetDrawable.java | 1 + .../java/android/graphics/drawable/LayerDrawable.java | 11 +++++------ .../android/graphics/drawable/RotateDrawable.java | 1 + .../java/android/graphics/drawable/ScaleDrawable.java | 1 + 7 files changed, 12 insertions(+), 6 deletions(-) diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java index 34f90708afeec..f0e97237a22b9 100644 --- a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java @@ -319,6 +319,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac mDrawable = source.mDrawable.getConstantState().newDrawable(); } mDrawable.setCallback(owner); + mDrawable.setLayoutDirection(source.mDrawable.getLayoutDirection()); mPivotXRel = source.mPivotXRel; mPivotX = source.mPivotX; mPivotYRel = source.mPivotYRel; diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java index b7429d412e6fe..eb9f046fdb1c9 100644 --- a/graphics/java/android/graphics/drawable/ClipDrawable.java +++ b/graphics/java/android/graphics/drawable/ClipDrawable.java @@ -263,6 +263,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { mDrawable = orig.mDrawable.getConstantState().newDrawable(); } mDrawable.setCallback(owner); + mDrawable.setLayoutDirection(orig.mDrawable.getLayoutDirection()); mOrientation = orig.mOrientation; mGravity = orig.mGravity; mCheckedConstantState = mCanConstantState = true; diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java index 8a4d598a533c6..0f84e861ca924 100644 --- a/graphics/java/android/graphics/drawable/DrawableContainer.java +++ b/graphics/java/android/graphics/drawable/DrawableContainer.java @@ -324,6 +324,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { d.setState(getState()); d.setLevel(getLevel()); d.setBounds(getBounds()); + d.setLayoutDirection(getLayoutDirection()); } } else { mCurrDrawable = null; @@ -480,6 +481,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { mDrawables[i] = origDr[i].getConstantState().newDrawable(); } mDrawables[i].setCallback(owner); + mDrawables[i].setLayoutDirection(origDr[i].getLayoutDirection()); } mCheckedConstantState = mCanConstantState = true; diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java index 231234cf4ee73..2576f42ef9e23 100644 --- a/graphics/java/android/graphics/drawable/InsetDrawable.java +++ b/graphics/java/android/graphics/drawable/InsetDrawable.java @@ -276,6 +276,7 @@ public class InsetDrawable extends Drawable implements Drawable.Callback mDrawable = orig.mDrawable.getConstantState().newDrawable(); } mDrawable.setCallback(owner); + mDrawable.setLayoutDirection(orig.mDrawable.getLayoutDirection()); mInsetLeft = orig.mInsetLeft; mInsetTop = orig.mInsetTop; mInsetRight = orig.mInsetRight; diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index dd692c68ec7e9..09b3eac0e7cc2 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -589,12 +589,10 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { /** @hide */ @Override public void setLayoutDirection(int layoutDirection) { - if (getLayoutDirection() != layoutDirection) { - final ChildDrawable[] array = mLayerState.mChildren; - final int N = mLayerState.mNum; - for (int i = 0; i < N; i++) { - array[i].mDrawable.setLayoutDirection(layoutDirection); - } + final ChildDrawable[] array = mLayerState.mChildren; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + array[i].mDrawable.setLayoutDirection(layoutDirection); } super.setLayoutDirection(layoutDirection); } @@ -641,6 +639,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { r.mDrawable = or.mDrawable.getConstantState().newDrawable(); } r.mDrawable.setCallback(owner); + r.mDrawable.setLayoutDirection(or.mDrawable.getLayoutDirection()); r.mInsetL = or.mInsetL; r.mInsetT = or.mInsetT; r.mInsetR = or.mInsetR; diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java index e987679dd49fe..83d95810f3683 100644 --- a/graphics/java/android/graphics/drawable/RotateDrawable.java +++ b/graphics/java/android/graphics/drawable/RotateDrawable.java @@ -316,6 +316,7 @@ public class RotateDrawable extends Drawable implements Drawable.Callback { mDrawable = source.mDrawable.getConstantState().newDrawable(); } mDrawable.setCallback(owner); + mDrawable.setLayoutDirection(source.mDrawable.getLayoutDirection()); mPivotXRel = source.mPivotXRel; mPivotX = source.mPivotX; mPivotYRel = source.mPivotYRel; diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java index bd2b2f0624a4b..0664214563dcb 100644 --- a/graphics/java/android/graphics/drawable/ScaleDrawable.java +++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java @@ -276,6 +276,7 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback { mDrawable = orig.mDrawable.getConstantState().newDrawable(); } mDrawable.setCallback(owner); + mDrawable.setLayoutDirection(orig.mDrawable.getLayoutDirection()); mScaleWidth = orig.mScaleWidth; mScaleHeight = orig.mScaleHeight; mGravity = orig.mGravity;