ImageView updates cached drawable dimensions when drawable updates

Changes to drawable dimensions were not propagated to cached dimension
values in ImageView. Now this is done when the drawable is invalidated.

Issue #18798152  ImageView caches wrong value of mDrawableWidth and mDrawableHeight

Change-Id: I8da7d82b0543fa02d8ef3d896595bd0e5ea2a61e
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 6b28f89..e0b2395 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -216,7 +216,7 @@
     protected boolean verifyDrawable(Drawable dr) {
         return mDrawable == dr || super.verifyDrawable(dr);
     }
-    
+
     @Override
     public void jumpDrawablesToCurrentState() {
         super.jumpDrawablesToCurrentState();
@@ -226,6 +226,15 @@
     @Override
     public void invalidateDrawable(Drawable dr) {
         if (dr == mDrawable) {
+            if (dr != null) {
+                // update cached drawable dimensions if they've changed
+                final int w = dr.getIntrinsicWidth();
+                final int h = dr.getIntrinsicHeight();
+                if (w != mDrawableWidth || h != mDrawableHeight) {
+                    mDrawableWidth = w;
+                    mDrawableHeight = h;
+                }
+            }
             /* we invalidate the whole view in this case because it's very
              * hard to know where the drawable actually is. This is made
              * complicated because of the offsets and transformations that