Fix bug #7334966 Padding is still broken in RTL languages
- do correct resolution and reset propagation for all RTL properties (padding and drawables included)
- fix CheckedTextView padding too
Change-Id: Ie603683a2324b2a6ef2c03633d01d5726c883b90
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 608bdd7..946965b 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -3666,15 +3666,10 @@
// Padding from the background drawable is stored at this point in mUserPaddingLeftInitial
// and mUserPaddingRightInitial) so drawable padding will be used as ultimate default if
// defined.
- if (startPaddingDefined) {
- mUserPaddingLeftInitial = startPadding;
- } else if (leftPaddingDefined) {
+ if (leftPaddingDefined) {
mUserPaddingLeftInitial = leftPadding;
}
- if (endPaddingDefined) {
- mUserPaddingRightInitial = endPadding;
- }
- else if (rightPaddingDefined) {
+ if (rightPaddingDefined) {
mUserPaddingRightInitial = rightPadding;
}
}
@@ -11559,8 +11554,10 @@
/**
* Resolve all RTL related properties.
+ *
+ * @hide
*/
- void resolveRtlPropertiesIfNeeded() {
+ public void resolveRtlPropertiesIfNeeded() {
if (!needRtlPropertiesResolution()) return;
// Order is important here: LayoutDirection MUST be resolved first
@@ -11584,8 +11581,12 @@
onRtlPropertiesChanged(getLayoutDirection());
}
- // Reset resolution of all RTL related properties.
- void resetRtlProperties() {
+ /**
+ * Reset resolution of all RTL related properties.
+ *
+ * @hide
+ */
+ public void resetRtlProperties() {
resetResolvedLayoutDirection();
resetResolvedTextDirection();
resetResolvedTextAlignment();
@@ -14195,7 +14196,7 @@
*
* @hide
*/
- public void resolveDrawables() {
+ protected void resolveDrawables() {
if (mBackground != null) {
mBackground.setLayoutDirection(getLayoutDirection());
}
@@ -14218,7 +14219,10 @@
public void onResolveDrawables(int layoutDirection) {
}
- private void resetResolvedDrawables() {
+ /**
+ * @hide
+ */
+ protected void resetResolvedDrawables() {
mPrivateFlags2 &= ~PFLAG2_DRAWABLE_RESOLVED;
}
@@ -14804,14 +14808,14 @@
if (isRtlCompatibilityMode()) {
mPaddingLeft = mUserPaddingLeftInitial;
mPaddingRight = mUserPaddingRightInitial;
+ return;
+ }
+ if (isLayoutRtl()) {
+ mPaddingLeft = (mUserPaddingEnd >= 0) ? mUserPaddingEnd : mUserPaddingLeftInitial;
+ mPaddingRight = (mUserPaddingStart >= 0) ? mUserPaddingStart : mUserPaddingRightInitial;
} else {
- if (isLayoutRtl()) {
- mPaddingLeft = mUserPaddingRightInitial;
- mPaddingRight = mUserPaddingLeftInitial;
- } else {
- mPaddingLeft = mUserPaddingLeftInitial;
- mPaddingRight = mUserPaddingRightInitial;
- }
+ mPaddingLeft = (mUserPaddingStart >= 0) ? mUserPaddingStart : mUserPaddingLeftInitial;
+ mPaddingRight = (mUserPaddingEnd >= 0) ? mUserPaddingEnd : mUserPaddingRightInitial;
}
}