157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadpackage com.android.overlaytest; 257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport android.content.res.Configuration; 457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport android.content.res.Resources; 557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport android.test.AndroidTestCase; 657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport java.io.InputStream; 757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport java.util.Locale; 857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadpublic abstract class OverlayBaseTest extends AndroidTestCase { 1057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad private Resources mResources; 1157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad protected boolean mWithOverlay; // will be set by subclasses 1257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 1357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad protected void setUp() { 1457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad mResources = getContext().getResources(); 1557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 1657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 1757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad private int calculateRawResourceChecksum(int resId) throws Throwable { 1857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad InputStream input = null; 1957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad try { 2057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad input = mResources.openRawResource(resId); 2157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad int ch, checksum = 0; 2257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad while ((ch = input.read()) != -1) { 2357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad checksum = (checksum + ch) % 0xffddbb00; 2457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 2557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad return checksum; 2657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } finally { 2757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad input.close(); 2857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 2957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 3057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 3157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad private void setLocale(String code) { 3257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad Locale locale = new Locale(code); 3357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad Locale.setDefault(locale); 3457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad Configuration config = new Configuration(); 3557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad config.locale = locale; 3657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad mResources.updateConfiguration(config, mResources.getDisplayMetrics()); 3757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 3857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 3957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad private void assertResource(int resId, boolean ewo, boolean ew) throws Throwable { 4057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad boolean expected = mWithOverlay ? ew : ewo; 4157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad boolean actual = mResources.getBoolean(resId); 4257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertEquals(expected, actual); 4357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 4457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 4557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad private void assertResource(int resId, String ewo, String ew) throws Throwable { 4657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad String expected = mWithOverlay ? ew : ewo; 4757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad String actual = mResources.getString(resId); 4857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertEquals(expected, actual); 4957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 5057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 5157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad private void assertResource(int resId, int[] ewo, int[] ew) throws Throwable { 5257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad int[] expected = mWithOverlay ? ew : ewo; 5357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad int[] actual = mResources.getIntArray(resId); 5457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertEquals("length:", expected.length, actual.length); 5557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad for (int i = 0; i < actual.length; ++i) { 5657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertEquals("index " + i + ":", actual[i], expected[i]); 5757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 5857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 5957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 6057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testBooleanOverlay() throws Throwable { 6157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // config_automatic_brightness_available has overlay (default config) 6257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int resId = com.android.internal.R.bool.config_automatic_brightness_available; 6357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, false, true); 6457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 6557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 6657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testBoolean() throws Throwable { 67c458ce98ce42c00b98afe00670f822814f3da572Jeff Brown // config_annoy_dianne has no overlay 68c458ce98ce42c00b98afe00670f822814f3da572Jeff Brown final int resId = com.android.internal.R.bool.config_annoy_dianne; 6957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, true, true); 7057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 7157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 7257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testStringOverlay() throws Throwable { 7357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // phoneTypeCar has an overlay (default config), which shouldn't shadow 7457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // the Swedish translation 7557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int resId = com.android.internal.R.string.phoneTypeCar; 7657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad setLocale("sv_SE"); 7757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, "Bil", "Bil"); 7857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 7957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 8057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testStringSwedishOverlay() throws Throwable { 8157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // phoneTypeWork has overlay (no default config, only for lang=sv) 8257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int resId = com.android.internal.R.string.phoneTypeWork; 8357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad setLocale("en_US"); 8457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, "Work", "Work"); 8557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad setLocale("sv_SE"); 8657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, "Arbete", "Jobb"); 8757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 8857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 8957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testString() throws Throwable { 9057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // phoneTypeHome has no overlay 9157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int resId = com.android.internal.R.string.phoneTypeHome; 9257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad setLocale("en_US"); 9357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, "Home", "Home"); 9457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad setLocale("sv_SE"); 9557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, "Hem", "Hem"); 9657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 9757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 9857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testIntegerArrayOverlay() throws Throwable { 9957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // config_scrollBarrierVibePattern has overlay (default config) 10057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int resId = com.android.internal.R.array.config_scrollBarrierVibePattern; 10157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, new int[]{0, 15, 10, 10}, new int[]{100, 200, 300}); 10257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 10357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 10457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testIntegerArray() throws Throwable { 10557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // config_virtualKeyVibePattern has no overlay 10657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int resId = com.android.internal.R.array.config_virtualKeyVibePattern; 10757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int[] expected = {0, 10, 20, 30}; 10857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertResource(resId, expected, expected); 10957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 11057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad 11157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad public void testAsset() throws Throwable { 11257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad // drawable/default_background.jpg has overlay (default config) 11357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad final int resId = com.android.internal.R.drawable.default_wallpaper; 11457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad int actual = calculateRawResourceChecksum(resId); 11557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad int expected = mWithOverlay ? 0x000051da : 0x0014ebce; 11657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad assertEquals(expected, actual); 11757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad } 11857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad} 119