am 07ce0ca2
: Merge "Fix bug #7419054 TextView Drawables resolution is broken in RTL mode" into jb-mr1-dev
* commit '07ce0ca265274c5ba95e6ec3e0950e38b8ce97ea': Fix bug #7419054 TextView Drawables resolution is broken in RTL mode
This commit is contained in:
@ -14197,11 +14197,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* @hide
|
||||
*/
|
||||
protected void resolveDrawables() {
|
||||
if (mBackground != null) {
|
||||
mBackground.setLayoutDirection(getLayoutDirection());
|
||||
if (canResolveLayoutDirection()) {
|
||||
if (mBackground != null) {
|
||||
mBackground.setLayoutDirection(getLayoutDirection());
|
||||
}
|
||||
mPrivateFlags2 |= PFLAG2_DRAWABLE_RESOLVED;
|
||||
onResolveDrawables(getLayoutDirection());
|
||||
}
|
||||
mPrivateFlags2 |= PFLAG2_DRAWABLE_RESOLVED;
|
||||
onResolveDrawables(getLayoutDirection());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3384,7 +3384,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
|
||||
if (child.isLayoutDirectionInherited()) {
|
||||
child.resetRtlProperties();
|
||||
child.resolveRtlPropertiesIfNeeded();
|
||||
}
|
||||
|
||||
onViewAdded(child);
|
||||
|
@ -144,6 +144,8 @@ public class Editor {
|
||||
CharSequence mError;
|
||||
boolean mErrorWasChanged;
|
||||
ErrorPopup mErrorPopup;
|
||||
private int mLastLayoutDirection = -1;
|
||||
|
||||
/**
|
||||
* This flag is set if the TextView tries to display an error before it
|
||||
* is attached to the window (so its position is still unknown).
|
||||
@ -288,23 +290,30 @@ public class Editor {
|
||||
public void setError(CharSequence error, Drawable icon) {
|
||||
mError = TextUtils.stringOrSpannedString(error);
|
||||
mErrorWasChanged = true;
|
||||
final Drawables dr = mTextView.mDrawables;
|
||||
if (dr != null) {
|
||||
switch (mTextView.getLayoutDirection()) {
|
||||
final int layoutDirection = mTextView.getLayoutDirection();
|
||||
if (mLastLayoutDirection != layoutDirection) {
|
||||
final Drawables dr = mTextView.mDrawables;
|
||||
switch (layoutDirection) {
|
||||
default:
|
||||
case View.LAYOUT_DIRECTION_LTR:
|
||||
mTextView.setCompoundDrawables(dr.mDrawableLeft, dr.mDrawableTop, icon,
|
||||
dr.mDrawableBottom);
|
||||
if (dr != null) {
|
||||
mTextView.setCompoundDrawables(dr.mDrawableLeft, dr.mDrawableTop, icon,
|
||||
dr.mDrawableBottom);
|
||||
} else {
|
||||
mTextView.setCompoundDrawables(null, null, icon, null);
|
||||
}
|
||||
break;
|
||||
case View.LAYOUT_DIRECTION_RTL:
|
||||
mTextView.setCompoundDrawables(icon, dr.mDrawableTop, dr.mDrawableRight,
|
||||
dr.mDrawableBottom);
|
||||
if (dr != null) {
|
||||
mTextView.setCompoundDrawables(icon, dr.mDrawableTop, dr.mDrawableRight,
|
||||
dr.mDrawableBottom);
|
||||
} else {
|
||||
mTextView.setCompoundDrawables(icon, null, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
mTextView.setCompoundDrawables(null, null, icon, null);
|
||||
mLastLayoutDirection = layoutDirection;
|
||||
}
|
||||
|
||||
if (mError == null) {
|
||||
if (mErrorPopup != null) {
|
||||
if (mErrorPopup.isShowing()) {
|
||||
|
@ -306,7 +306,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
private Layout.Alignment mLayoutAlignment;
|
||||
private int mResolvedTextAlignment;
|
||||
|
||||
private boolean mResolvedDrawables;
|
||||
private int mLastLayoutDirection = -1;
|
||||
|
||||
/**
|
||||
* On some devices the fading edges add a performance penalty if used
|
||||
@ -8260,16 +8260,16 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
@Override
|
||||
public void onResolveDrawables(int layoutDirection) {
|
||||
// No need to resolve twice
|
||||
if (mResolvedDrawables) {
|
||||
if (mLastLayoutDirection == layoutDirection) {
|
||||
return;
|
||||
}
|
||||
mLastLayoutDirection = layoutDirection;
|
||||
// No drawable to resolve
|
||||
if (mDrawables == null) {
|
||||
return;
|
||||
}
|
||||
// No relative drawable to resolve
|
||||
if (mDrawables.mDrawableStart == null && mDrawables.mDrawableEnd == null) {
|
||||
mResolvedDrawables = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -8307,7 +8307,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
break;
|
||||
}
|
||||
updateDrawablesLayoutDirection(dr, layoutDirection);
|
||||
mResolvedDrawables = true;
|
||||
}
|
||||
|
||||
private void updateDrawablesLayoutDirection(Drawables dr, int layoutDirection) {
|
||||
@ -8329,7 +8328,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
* @hide
|
||||
*/
|
||||
protected void resetResolvedDrawables() {
|
||||
mResolvedDrawables = false;
|
||||
mLastLayoutDirection = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user