diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/ColorStateListDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/ColorStateListDrawableTest.java
index 7487e55..5218a4fd 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/ColorStateListDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/ColorStateListDrawableTest.java
@@ -18,15 +18,21 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import android.R;
 import android.content.res.ColorStateList;
 import android.graphics.Canvas;
 import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.LightingColorFilter;
 import android.graphics.PixelFormat;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.ColorStateListDrawable;
 import android.graphics.drawable.Drawable;
+import android.os.SystemClock;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
 
@@ -78,6 +84,15 @@
     }
 
     @Test
+    public void testHasFocusStateSpecified() {
+        assertFalse(mDrawable.hasFocusStateSpecified());
+        final int[][] state = new int[][]{new int[]{1}, new int[]{2, R.attr.state_focused}};
+        final int[] colors = new int[]{Color.MAGENTA, Color.CYAN};
+        mDrawable.setColorStateList(new ColorStateList(state, colors));
+        assertTrue(mDrawable.hasFocusStateSpecified());
+    }
+
+    @Test
     public void testAlpha() {
         int transBlue = (Color.BLUE & 0xFFFFFF) | 127 << 24;
         mDrawable.setColorStateList(ColorStateList.valueOf(transBlue));
@@ -99,6 +114,31 @@
     }
 
     @Test
+    public void testColorFilter() {
+        final ColorDrawable colorDrawable = (ColorDrawable) mDrawable.getCurrent();
+        final ColorFilter colorFilter = new LightingColorFilter(Color.GRAY, Color.GREEN);
+
+        assertNull(mDrawable.getColorFilter());
+        mDrawable.setColorFilter(colorFilter);
+        assertEquals(colorFilter, mDrawable.getColorFilter());
+    }
+
+    @Test
+    public void testColorStateListAccess() {
+        final ColorStateListDrawable cslDrawable = new ColorStateListDrawable();
+        final ColorDrawable colorDrawable = (ColorDrawable) cslDrawable.getCurrent();
+        assertNotNull(cslDrawable.getColorStateList());
+        assertEquals(
+                colorDrawable.getColor(),
+                cslDrawable
+                        .getColorStateList()
+                        .getColorForState(cslDrawable.getState(), Color.YELLOW));
+
+        cslDrawable.setColorStateList(mColorStateList);
+        assertEquals(mColorStateList, cslDrawable.getColorStateList());
+    }
+
+    @Test
     public void testSetState() {
         ColorDrawable colorDrawable = (ColorDrawable) mDrawable.getCurrent();
         assertEquals(colorDrawable.getColor(), mColorStateList.getDefaultColor());
@@ -114,4 +154,79 @@
         assertEquals(mDrawable.mutate(), mDrawable);
         assertNotEquals(mDrawable.getConstantState(), oldState);
     }
+
+    @Test
+    public void testInvalidationCallbackProxy() {
+        final TestCallback callback = new TestCallback();
+        mDrawable.setCallback(callback);
+
+        callback.mInvalidatedDrawable = null;
+        mDrawable.invalidateSelf();
+        assertEquals(mDrawable, callback.mInvalidatedDrawable);
+
+        callback.mInvalidatedDrawable = null;
+        mDrawable.getCurrent().invalidateSelf();
+        assertEquals(mDrawable, callback.mInvalidatedDrawable);
+    }
+
+    @Test
+    public void testScheduleCallbackProxy() {
+        final Runnable runnable = new NoOpRunnable();
+        final long scheduledTime = SystemClock.uptimeMillis() + 100;
+        final TestCallback callback = new TestCallback();
+        mDrawable.setCallback(callback);
+
+        mDrawable.getCurrent().scheduleSelf(runnable, scheduledTime);
+        assertEquals(mDrawable, callback.mScheduledDrawable);
+        assertEquals(runnable, callback.mScheduledRunnable);
+        assertEquals(scheduledTime, callback.mScheduledTime);
+    }
+
+    @Test
+    public void testUnscheduleCallbackProxy() {
+        final Runnable runnable = new NoOpRunnable();
+        final TestCallback callback = new TestCallback();
+        mDrawable.setCallback(callback);
+
+        mDrawable.getCurrent().unscheduleSelf(runnable);
+
+        assertEquals(mDrawable, callback.mUnscheduledDrawable);
+        assertEquals(runnable, callback.mUnscheduledRunnable);
+    }
+
+    private final class TestCallback implements Drawable.Callback {
+        private Drawable mInvalidatedDrawable;
+        private Drawable mScheduledDrawable;
+        private Drawable mUnscheduledDrawable;
+
+        private Runnable mScheduledRunnable;
+        private Runnable mUnscheduledRunnable;
+
+        private long mScheduledTime;
+
+        @Override
+        public void invalidateDrawable(Drawable who) {
+            mInvalidatedDrawable = who;
+        }
+
+        @Override
+        public void scheduleDrawable(Drawable who, Runnable what, long when) {
+            mScheduledDrawable = who;
+            mScheduledRunnable = what;
+            mScheduledTime = when;
+        }
+
+        @Override
+        public void unscheduleDrawable(Drawable who, Runnable what) {
+            mUnscheduledDrawable = who;
+            mUnscheduledRunnable = what;
+        }
+    }
+
+    private final class NoOpRunnable implements Runnable {
+        @Override
+        public void run() {
+
+        }
+    }
 }
