1698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov/* 2698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * Copyright (C) 2015 The Android Open Source Project 3698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * 4698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * you may not use this file except in compliance with the License. 6698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * You may obtain a copy of the License at 7698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * 8698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * http://www.apache.org/licenses/LICENSE-2.0 9698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * 10698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * Unless required by applicable law or agreed to in writing, software 11698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS, 12698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * See the License for the specific language governing permissions and 14698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov * limitations under the License. 15698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov */ 16698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikovpackage android.support.v4.content.res; 17698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 18698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikovimport android.content.res.ColorStateList; 19698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikovimport android.content.res.Resources; 20bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikovimport android.graphics.drawable.Drawable; 21698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikovimport android.os.Build; 22f5ec4487510a0e7226636704860a884f4c1d0ab6Kirill Grouchnikovimport android.support.compat.test.R; 23881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikovimport android.support.test.InstrumentationRegistry; 24bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikovimport android.support.v4.testutils.TestUtils; 25698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikovimport android.test.suitebuilder.annotation.SmallTest; 26cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikovimport android.util.DisplayMetrics; 27881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikovimport org.junit.Before; 28881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikovimport org.junit.Test; 29698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 30881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikovimport static org.junit.Assert.assertEquals; 31698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 32881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov@SmallTest 33881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikovpublic class ResourcesCompatTest { 34881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov private Resources mResources; 35881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov 36881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov @Before 37881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov public void setup() { 38881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov mResources = InstrumentationRegistry.getContext().getResources(); 39698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov } 40698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 41881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov @Test 42698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov public void testGetColor() throws Throwable { 43bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov assertEquals("Unthemed color load", 44881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getColor(mResources, R.color.text_color, null), 45698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 0xFFFF8090); 46698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 47698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov if (Build.VERSION.SDK_INT >= 23) { 48698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov // The following tests are only expected to pass on v23+ devices. The result of 49698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov // calling theme-aware getColor() in pre-v23 is undefined. 50881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme yellowTheme = mResources.newTheme(); 51698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov yellowTheme.applyStyle(R.style.YellowTheme, true); 52cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed yellow color load", 0xFFF0B000, 53881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getColor(mResources, R.color.simple_themed_selector, 54881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov yellowTheme)); 55698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 56881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme lilacTheme = mResources.newTheme(); 57698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov lilacTheme.applyStyle(R.style.LilacTheme, true); 58cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed lilac color load", 0xFFF080F0, 59881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getColor(mResources, R.color.simple_themed_selector, 60881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov lilacTheme)); 61698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov } 62698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov } 63698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 64881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov @Test 65698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov public void testGetColorStateList() throws Throwable { 66cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final ColorStateList unthemedColorStateList = 67881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getColorStateList(mResources, R.color.complex_unthemed_selector, 68881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov null); 69cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed color state list load: default", 0xFF70A0C0, 70cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov unthemedColorStateList.getDefaultColor()); 71cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed color state list load: focused", 0xFF70B0F0, 72698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov unthemedColorStateList.getColorForState( 73cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov new int[]{android.R.attr.state_focused}, 0)); 74cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed color state list load: pressed", 0xFF6080B0, 75698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov unthemedColorStateList.getColorForState( 76cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov new int[]{android.R.attr.state_pressed}, 0)); 77698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 78698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov if (Build.VERSION.SDK_INT >= 23) { 79698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov // The following tests are only expected to pass on v23+ devices. The result of 80698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov // calling theme-aware getColorStateList() in pre-v23 is undefined. 81881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme yellowTheme = mResources.newTheme(); 82698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov yellowTheme.applyStyle(R.style.YellowTheme, true); 83cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final ColorStateList themedYellowColorStateList = 84881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getColorStateList(mResources, R.color.complex_themed_selector, 85698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov yellowTheme); 86cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed yellow color state list load: default", 0xFFF0B000, 87cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedYellowColorStateList.getDefaultColor()); 88cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed yellow color state list load: focused", 0xFFF0A020, 89698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov themedYellowColorStateList.getColorForState( 90cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov new int[]{android.R.attr.state_focused}, 0)); 91cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed yellow color state list load: pressed", 0xFFE0A040, 92698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov themedYellowColorStateList.getColorForState( 93cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov new int[]{android.R.attr.state_pressed}, 0)); 94698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov 95881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme lilacTheme = mResources.newTheme(); 96698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov lilacTheme.applyStyle(R.style.LilacTheme, true); 97cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final ColorStateList themedLilacColorStateList = 98881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getColorStateList(mResources, R.color.complex_themed_selector, 99698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov lilacTheme); 100cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed lilac color state list load: default", 0xFFF080F0, 101cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedLilacColorStateList.getDefaultColor()); 102cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed lilac color state list load: focused", 0xFFF070D0, 103698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov themedLilacColorStateList.getColorForState( 104cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov new int[]{android.R.attr.state_focused}, 0)); 105cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Themed lilac color state list load: pressed", 0xFFE070A0, 106698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov themedLilacColorStateList.getColorForState( 107cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov new int[]{android.R.attr.state_pressed}, 0)); 108698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov } 109698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov } 110bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov 111881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov @Test 112bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov public void testGetDrawable() throws Throwable { 113cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final Drawable unthemedDrawable = 114881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawable(mResources, R.drawable.test_drawable_red, null); 115bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Unthemed drawable load", 116881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov unthemedDrawable, mResources.getColor(R.color.test_red)); 117bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov 118bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov if (Build.VERSION.SDK_INT >= 23) { 119bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov // The following tests are only expected to pass on v23+ devices. The result of 120bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov // calling theme-aware getDrawable() in pre-v23 is undefined. 121881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme yellowTheme = mResources.newTheme(); 122bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov yellowTheme.applyStyle(R.style.YellowTheme, true); 123cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final Drawable themedYellowDrawable = 124881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawable(mResources, R.drawable.themed_drawable, 125881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov yellowTheme); 126bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed yellow drawable load", 127bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov themedYellowDrawable, 0xFFF0B000); 128bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov 129881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme lilacTheme = mResources.newTheme(); 130bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov lilacTheme.applyStyle(R.style.LilacTheme, true); 131cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final Drawable themedLilacDrawable = 132881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawable(mResources, R.drawable.themed_drawable, lilacTheme); 133bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed lilac drawable load", 134bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov themedLilacDrawable, 0xFFF080F0); 135bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov } 136bc927aa4ec8007a8faaa5672f4b3c7ef59c7e36fKirill Grouchnikov } 137cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 138881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov @Test 139cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov public void testGetDrawableForDensityUnthemed() throws Throwable { 140cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // Density-aware drawable loading for now only works on raw bitmap drawables. 141cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 142cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // Different variants of density_aware_drawable are set up in the following way: 143cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // mdpi - 12x12 px which is 12x12 dip 144cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // hdpi - 21x21 px which is 14x14 dip 145cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // xhdpi - 32x32 px which is 16x16 dip 146cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // xxhdpi - 54x54 px which is 18x18 dip 147cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // The tests below (on v15+ devices) are checking that an unthemed density-aware 148cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // loading of raw bitmap drawables returns a drawable with matching intrinsic 149cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // dimensions. 150cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 151cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final Drawable unthemedDrawableForMediumDensity = 152881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.density_aware_drawable, 153cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_MEDIUM, null); 154cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // For pre-v15 devices we should get a drawable that corresponds to the density of the 155cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // current device. For v15+ devices we should get a drawable that corresponds to the 156cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // density requested in the API call. 157cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final int expectedSizeForMediumDensity = (Build.VERSION.SDK_INT < 15) ? 158881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov mResources.getDimensionPixelSize(R.dimen.density_aware_size) : 12; 159cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: medium width", 160cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForMediumDensity, unthemedDrawableForMediumDensity.getIntrinsicWidth()); 161cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: medium height", 162cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForMediumDensity, 163cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov unthemedDrawableForMediumDensity.getIntrinsicHeight()); 164cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 165cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final Drawable unthemedDrawableForHighDensity = 166881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.density_aware_drawable, 167cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_HIGH, null); 168cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // For pre-v15 devices we should get a drawable that corresponds to the density of the 169cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // current device. For v15+ devices we should get a drawable that corresponds to the 170cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // density requested in the API call. 171cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final int expectedSizeForHighDensity = (Build.VERSION.SDK_INT < 15) ? 172881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov mResources.getDimensionPixelSize(R.dimen.density_aware_size) : 21; 173cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: high width", 174cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForHighDensity, unthemedDrawableForHighDensity.getIntrinsicWidth()); 175cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: high height", 176cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForHighDensity, unthemedDrawableForHighDensity.getIntrinsicHeight()); 177cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 178cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final Drawable unthemedDrawableForXHighDensity = 179881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.density_aware_drawable, 180cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_XHIGH, null); 181cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // For pre-v15 devices we should get a drawable that corresponds to the density of the 182cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // current device. For v15+ devices we should get a drawable that corresponds to the 183cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // density requested in the API call. 184cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final int expectedSizeForXHighDensity = (Build.VERSION.SDK_INT < 15) ? 185881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov mResources.getDimensionPixelSize(R.dimen.density_aware_size) : 32; 186cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: xhigh width", 187cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForXHighDensity, unthemedDrawableForXHighDensity.getIntrinsicWidth()); 188cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: xhigh height", 189cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForXHighDensity, unthemedDrawableForXHighDensity.getIntrinsicHeight()); 190cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 191cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final Drawable unthemedDrawableForXXHighDensity = 192881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.density_aware_drawable, 193cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_XXHIGH, null); 194cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // For pre-v15 devices we should get a drawable that corresponds to the density of the 195cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // current device. For v15+ devices we should get a drawable that corresponds to the 196cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // density requested in the API call. 197cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov final int expectedSizeForXXHighDensity = (Build.VERSION.SDK_INT < 15) ? 198881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov mResources.getDimensionPixelSize(R.dimen.density_aware_size) : 54; 199cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: xxhigh width", 200cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForXXHighDensity, unthemedDrawableForXXHighDensity.getIntrinsicWidth()); 201cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov assertEquals("Unthemed density-aware drawable load: xxhigh height", 202cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov expectedSizeForXXHighDensity, 203cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov unthemedDrawableForXXHighDensity.getIntrinsicHeight()); 204cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov } 205cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 206881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov @Test 207cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov public void testGetDrawableForDensityThemed() throws Throwable { 208cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov if (Build.VERSION.SDK_INT < 21) { 209cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // The following tests are only expected to pass on v21+ devices. The result of 210cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // calling theme-aware getDrawableForDensity() in pre-v21 is undefined. 211cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov return; 212cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov } 213cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 214cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // Density- and theme-aware drawable loading for now only works partially. This test 215cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // checks only for theming of a tinted bitmap XML drawable, but not correct scaling. 216cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 217cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // Set up the two test themes, yellow and lilac. 218881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme yellowTheme = mResources.newTheme(); 219cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov yellowTheme.applyStyle(R.style.YellowTheme, true); 220cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 221881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov final Resources.Theme lilacTheme = mResources.newTheme(); 222cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov lilacTheme.applyStyle(R.style.LilacTheme, true); 223cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 224cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedYellowDrawableForMediumDensity = 225881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 226cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_MEDIUM, yellowTheme); 227cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 228cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed yellow density-aware drawable load : medium color", 229cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedYellowDrawableForMediumDensity, 0xFFF0B000); 230cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 231cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedLilacDrawableForMediumDensity = 232881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 233cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_MEDIUM, lilacTheme); 234cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 235cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed lilac density-aware drawable load : medium color", 236cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedLilacDrawableForMediumDensity, 0xFFF080F0); 237cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 238cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedYellowDrawableForHighDensity = 239881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 240cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_HIGH, yellowTheme); 241cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 242cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed yellow density-aware drawable load : high color", 243cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedYellowDrawableForHighDensity, 0xFFF0B000); 244cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 245cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedLilacDrawableForHighDensity = 246881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 247cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_HIGH, lilacTheme); 248cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 249cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed lilac density-aware drawable load : high color", 250cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedLilacDrawableForHighDensity, 0xFFF080F0); 251cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 252cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedYellowDrawableForXHighDensity = 253881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 254cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_XHIGH, yellowTheme); 255cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 256cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed yellow density-aware drawable load : xhigh color", 257cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedYellowDrawableForXHighDensity, 0xFFF0B000); 258cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 259cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedLilacDrawableForXHighDensity = 260881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 261cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_XHIGH, lilacTheme); 262cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 263cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed lilac density-aware drawable load : xhigh color", 264cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedLilacDrawableForXHighDensity, 0xFFF080F0); 265cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 266cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedYellowDrawableForXXHighDensity = 267881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 268cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_XXHIGH, yellowTheme); 269cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 270cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed yellow density-aware drawable load : xxhigh color", 271cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedYellowDrawableForXXHighDensity, 0xFFF0B000); 272cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov 273cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov Drawable themedLilacDrawableForXXHighDensity = 274881c193f64d35ea2a106a2f76c30bd711a971bb1Kirill Grouchnikov ResourcesCompat.getDrawableForDensity(mResources, R.drawable.themed_bitmap, 275cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov DisplayMetrics.DENSITY_XXHIGH, lilacTheme); 276cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov // We should get a drawable that corresponds to the theme requested in the API call. 277cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov TestUtils.assertAllPixelsOfColor("Themed lilac density-aware drawable load : xxhigh color", 278cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov themedLilacDrawableForXXHighDensity, 0xFFF080F0); 279cac6006689cab12a5aa2f79ba68fb65467b3d77fKirill Grouchnikov } 280698fb2ad5c78bfd5eff8b66cfcffd2636e08aa87Kirill Grouchnikov} 281