Ensure nine-patch uses the best available target density

Bug: 27507887
Change-Id: Iddab4fdd2fe8fbf201dbb8ed42657a00509f42cc
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index fd3b9b4..5b1cc80 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -748,7 +748,14 @@
             setDither(state.mDither);
         }
 
-        mTargetDensity = Drawable.resolveDensity(res, mTargetDensity);
+        // The nine-patch may have been created without a Resources object, in
+        // which case we should try to match the density of the nine patch (if
+        // available).
+        if (res == null && state.mNinePatch != null) {
+            mTargetDensity = state.mNinePatch.getDensity();
+        } else {
+            mTargetDensity = Drawable.resolveDensity(res, mTargetDensity);
+        }
         mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode);
         computeBitmapSize();
     }