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;
         }
     }