From e1ba9407f75a08f696dcdf1adf8bc8dac1d3d598 Mon Sep 17 00:00:00 2001 From: Danesh M Date: Wed, 15 Jun 2016 14:13:55 -0700 Subject: CMSDK : Fix generateAlertColorFromDrawable for non BitmapDrawable In the case that the bitmap being passed in was not a bitmap drawable, we were not retaining any of the attributes from the original drawable. This patch ensures we ask that drawable to draw on the canvas/bitmap so we can use that information. Also add tests around it. Change-Id: I3eefba6e6624fe0bed4965ddf9029320c40f7420 --- .../org/cyanogenmod/tests/util/ColorUtilTest.java | 33 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/src/org/cyanogenmod/tests/util/ColorUtilTest.java b/tests/src/org/cyanogenmod/tests/util/ColorUtilTest.java index 769ce66..56e5a2a 100644 --- a/tests/src/org/cyanogenmod/tests/util/ColorUtilTest.java +++ b/tests/src/org/cyanogenmod/tests/util/ColorUtilTest.java @@ -21,9 +21,12 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; import android.test.AndroidTestCase; -import android.util.MathUtils; import cyanogenmod.util.ColorUtils; +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; public class ColorUtilTest extends AndroidTestCase { private ColorUtils mColorUtils; @@ -59,13 +62,17 @@ public class ColorUtilTest extends AndroidTestCase { assertEquals(color, Color.BLACK); Bitmap bitmap = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); + BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); + bitmapDrawable.setBounds(0, 0, 10, 10); Canvas canvas = new Canvas(bitmap); canvas.drawColor(Color.RED); // Test fully red bitmap - BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap); color = mColorUtils.generateAlertColorFromDrawable(bitmapDrawable); assertEquals(color, Color.RED); + color = mColorUtils.generateAlertColorFromDrawable( + getColorDrawableFromBitmapDrawable(bitmapDrawable)); + assertEquals(color, Color.RED); // Test blue/red bitmap with blue dominating Paint p = new Paint(); @@ -74,12 +81,18 @@ public class ColorUtilTest extends AndroidTestCase { canvas.drawRect(0, 0, 8, 8, p); color = mColorUtils.generateAlertColorFromDrawable(bitmapDrawable); assertEquals(color, Color.BLUE); + color = mColorUtils.generateAlertColorFromDrawable( + getColorDrawableFromBitmapDrawable(bitmapDrawable)); + assertEquals(color, Color.BLUE); // Test large white + small blue scenario canvas.drawColor(Color.WHITE); canvas.drawRect(0, 0, 2, 2, p); color = mColorUtils.generateAlertColorFromDrawable(bitmapDrawable); assertEquals(color, Color.BLUE); + color = mColorUtils.generateAlertColorFromDrawable( + getColorDrawableFromBitmapDrawable(bitmapDrawable)); + assertEquals(color, Color.BLUE); // Test large white + small black scenario canvas.drawColor(Color.WHITE); @@ -87,8 +100,24 @@ public class ColorUtilTest extends AndroidTestCase { canvas.drawRect(0, 0, 2, 2, p); color = mColorUtils.generateAlertColorFromDrawable(bitmapDrawable); assertEquals(color, Color.WHITE); + color = mColorUtils.generateAlertColorFromDrawable( + getColorDrawableFromBitmapDrawable(bitmapDrawable)); + assertEquals(color, Color.WHITE); assertEquals(bitmap.isRecycled(), false); bitmap.recycle(); } + + private ColorDrawable getColorDrawableFromBitmapDrawable(final BitmapDrawable bitmapDrawable) { + ColorDrawable colorDrawable = Mockito.mock(ColorDrawable.class); + Mockito.doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + Canvas canvas = (Canvas) invocation.getArguments()[0]; + bitmapDrawable.draw(canvas); + return null; + } + }).when(colorDrawable).draw(Mockito.any(Canvas.class)); + return colorDrawable; + } } -- cgit v1.1