19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2018 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage androidx.core.graphics.drawable 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap.Config 209b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Liimport android.graphics.Color 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.BitmapDrawable 229b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Liimport android.graphics.drawable.ColorDrawable 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.support.test.InstrumentationRegistry 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport androidx.core.graphics.createBitmap 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.junit.Assert.assertEquals 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.junit.Test 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass DrawableTest { 29a696f5d667227365da732481770767dcb330dd23Mathias Agopian private val context = InstrumentationRegistry.getContext() 3030771b773393596812b6cfd2a4ddf490c43437aaWu-cheng Li private val resources = context.resources 31fd6f39e147dc077139a41b9c2a4039fbaa20224eJamie Gennis 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Test fun bitmapDrawableNoSizeNoConfig() { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project val original = createBitmap(10, 10).apply { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project eraseColor(Color.RED) 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project val drawable = BitmapDrawable(resources, original) 37bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 38bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val bitmap = drawable.toBitmap() 39bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(10, bitmap.width) 40df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main assertEquals(10, bitmap.height) 41bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Config.ARGB_8888, bitmap.config) 427478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li assertEquals(Color.RED, bitmap.getPixel(5, 5)) 43df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main } 44df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main 45bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor @Test fun bitmapDrawableNoSizeRetainedConfig() { 467478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li val original = createBitmap(10, 10).apply { 47df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main eraseColor(Color.RED) 48df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main } 49df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main val drawable = BitmapDrawable(resources, original) 50df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main 51df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main val bitmap = drawable.toBitmap(config = Config.ARGB_8888) 52bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(10, bitmap.width) 53bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(10, bitmap.height) 54bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Config.ARGB_8888, bitmap.config) 55341ff13689dfe822b598e626272ac2e80041b482Dan Egnor assertEquals(Color.RED, bitmap.getPixel(5, 5)) 56bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 57bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 58bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor @Test fun bitmapDrawableNoSizeDifferentConfig() { 59bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val original = createBitmap(10, 10).apply { 60bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor eraseColor(Color.RED) 61bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 62bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val drawable = BitmapDrawable(resources, original) 63bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 64bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val bitmap = drawable.toBitmap(config = Config.ARGB_8888) 65bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(10, bitmap.width) 66bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(10, bitmap.height) 67bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Config.ARGB_8888, bitmap.config) 68bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Color.RED, bitmap.getPixel(5, 5)) 69bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 70bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 71bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor @Test fun bitmapDrawableDifferentSizeNoConfig() { 72bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val original = createBitmap(10, 10).apply { 73bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor eraseColor(Color.RED) 74bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 75bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val drawable = BitmapDrawable(resources, original) 76bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 77bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val bitmap = drawable.toBitmap(20, 20) 78bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(20, bitmap.width) 79bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(20, bitmap.height) 80bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Config.ARGB_8888, bitmap.config) 81bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Color.RED, bitmap.getPixel(10, 10)) 82bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 83bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 84bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor @Test fun bitmapDrawableDifferentSizeDifferentConfig() { 85bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val original = createBitmap(10, 10).apply { 86bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor eraseColor(Color.RED) 87bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 88bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val drawable = BitmapDrawable(resources, original) 89bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 90bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val bitmap = drawable.toBitmap(20, 20, Config.ARGB_8888) 91bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(20, bitmap.width) 92bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(20, bitmap.height) 93bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Config.ARGB_8888, bitmap.config) 94bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Color.RED, bitmap.getPixel(10, 10)) 95bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 96bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 97bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor @Test fun drawableNoConfig() { 98bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val drawable = object : ColorDrawable(Color.RED) { 99bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor override fun getIntrinsicWidth() = 10 100bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor override fun getIntrinsicHeight() = 10 101bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 102bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 103bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor val bitmap = drawable.toBitmap() 104bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(10, bitmap.width) 105bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(10, bitmap.height) 106bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor assertEquals(Config.ARGB_8888, bitmap.config) 107341ff13689dfe822b598e626272ac2e80041b482Dan Egnor assertEquals(Color.RED, bitmap.getPixel(5, 5)) 108bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor } 109bfcbeffc54e93b1c2e2d95fdc301786df4376d6fDan Egnor 110df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main @Test fun drawableConfig() { 111df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main val drawable = object : ColorDrawable(Color.RED) { 112df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main override fun getIntrinsicWidth() = 10 1137478ea6848c0059e65a4089b4ec2ff4158520870Wu-cheng Li override fun getIntrinsicHeight() = 10 114df4578e8ab7008a7e528d5af2ae761b33cf2bdf4Scott Main } 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project val bitmap = drawable.toBitmap(config = Config.RGB_565) 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(10, bitmap.width) 1189b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li assertEquals(10, bitmap.height) 119d2c2929c94bec68741b85f4174e11307fb65157fWu-cheng Li assertEquals(Config.RGB_565, bitmap.config) 120da83f4674a564007baac03db062a289c8158d940Benny Wong assertEquals(Color.RED, bitmap.getPixel(5, 5)) 121da83f4674a564007baac03db062a289c8158d940Benny Wong } 122da83f4674a564007baac03db062a289c8158d940Benny Wong 123da83f4674a564007baac03db062a289c8158d940Benny Wong @Test fun drawableSize() { 124da83f4674a564007baac03db062a289c8158d940Benny Wong val drawable = object : ColorDrawable(Color.RED) { 125da83f4674a564007baac03db062a289c8158d940Benny Wong override fun getIntrinsicWidth() = 10 126da83f4674a564007baac03db062a289c8158d940Benny Wong override fun getIntrinsicHeight() = 10 127da83f4674a564007baac03db062a289c8158d940Benny Wong } 128da83f4674a564007baac03db062a289c8158d940Benny Wong 129da83f4674a564007baac03db062a289c8158d940Benny Wong val bitmap = drawable.toBitmap(20, 20) 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(20, bitmap.width) 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(20, bitmap.height) 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(Config.ARGB_8888, bitmap.config) 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(Color.RED, bitmap.getPixel(10, 10)) 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Test fun oldBoundsRestored() { 137e8b26e197f7c5e4acbdf8a5cd3f014fbc242c8abDave Sparks val drawable = object : ColorDrawable(Color.RED) { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project override fun getIntrinsicWidth() = 10 1393f4639a6611222ae1ae5493de49213250d292139Wu-cheng Li override fun getIntrinsicHeight() = 10 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project drawable.setBounds(2, 2, 8, 8) 14294927dffce1626898b59579dfc5af53b5de8cef6Andrew Harp 1439b6a8ab8221f2df20c32711b0f1e4f301165fac2Wu-cheng Li val bitmap = drawable.toBitmap() 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(10, bitmap.width) 145341ff13689dfe822b598e626272ac2e80041b482Dan Egnor assertEquals(10, bitmap.height) 146e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang 147e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang assertEquals(2, drawable.bounds.left) 148e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang assertEquals(2, drawable.bounds.top) 149e25cc656392d8866e163f78b60c7791455d0fb44Chih-Chung Chang assertEquals(8, drawable.bounds.right) 150341ff13689dfe822b598e626272ac2e80041b482Dan Egnor assertEquals(8, drawable.bounds.bottom) 151b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang } 152b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang 153b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang @Test fun updateBoundsTest() { 154b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang val drawable = object : ColorDrawable(Color.RED) { 155b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang override fun getIntrinsicWidth() = 10 156b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang override fun getIntrinsicHeight() = 10 157b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang } 158b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang drawable.setBounds(0, 0, 10, 10) 1597836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li 1607836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li drawable.updateBounds(1, 2, 3, 4) 1617836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li 162b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang assertEquals(1, drawable.bounds.left) 1637836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li assertEquals(2, drawable.bounds.top) 1647836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li assertEquals(3, drawable.bounds.right) 1657836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li assertEquals(4, drawable.bounds.bottom) 1667836660f5eb45b7b7e1f5119face65c80e2ade17Wu-cheng Li } 167b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang} 168b8bb78f54b48868465a9d69d65fda08524ab5ae1Chih-Chung Chang