133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 370a3ec81f0bda52d8388facf562a80e2d16ac96fGonçalo Silvaimport android.content.res.AssetManager; 46b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesiimport android.content.res.Configuration; 5b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.content.res.Resources; 6ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williamsimport android.content.res.TypedArray; 7b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport android.graphics.BitmapFactory; 8b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.graphics.drawable.BitmapDrawable; 9b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.graphics.drawable.Drawable; 10ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesiimport android.graphics.drawable.NinePatchDrawable; 11ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williamsimport android.util.AttributeSet; 12b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.util.DisplayMetrics; 13e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport android.view.Display; 1470a3ec81f0bda52d8388facf562a80e2d16ac96fGonçalo Silvaimport com.xtremelabs.robolectric.Robolectric; 1522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 1622c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 17f64d95f87eb9715622e3f77eb0b369d60270054cChristian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject; 18f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakkerimport com.xtremelabs.robolectric.res.ResourceExtractor; 193f1d4fe696c2f3efe99b8ef39868c064928efb1aTyler Schultzimport com.xtremelabs.robolectric.res.ResourceLoader; 20b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 21e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport java.io.InputStream; 22e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport java.util.Locale; 23e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu 24e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport static com.xtremelabs.robolectric.Robolectric.newInstanceOf; 25e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wuimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 26e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu 2759d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin/** 2859d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * Shadow of {@code Resources} that simulates the loading of resources 2959d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * 3059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * @see com.xtremelabs.robolectric.RobolectricTestRunner#RobolectricTestRunner(Class, String, String) 3159d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin */ 32b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin@SuppressWarnings({"UnusedDeclaration"}) 33b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin@Implements(Resources.class) 34afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowResources { 35e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard private float density = 1.0f; 36cc86c1d752c8e2f2e0c45b7083bd290a85061400Chris Van Vranken Configuration configuration = null; 37e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu private DisplayMetrics displayMetrics; 389931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante private Display display; 39e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu 4008d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams static Resources bind(Resources resources, ResourceLoader resourceLoader) { 41a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams ShadowResources shadowResources = shadowOf(resources); 4203ce698c2bb5b203761ce51694d2fa104be4a40dTyler Schultz if (shadowResources.resourceLoader != null) throw new RuntimeException("ResourceLoader already set!"); 4303ce698c2bb5b203761ce51694d2fa104be4a40dTyler Schultz shadowResources.resourceLoader = resourceLoader; 4408d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams return resources; 4508d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams } 4608d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams 479931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante @RealObject 489931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante Resources realResources; 4908d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams private ResourceLoader resourceLoader; 5008d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams 51de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 529931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante public int getIdentifier(String name, String defType, String defPackage) { 53f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker Integer index = 0; 549931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 55f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker ResourceExtractor resourceExtractor = resourceLoader.getResourceExtractor(); 569931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 57f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker index = resourceExtractor.getResourceId(defType + "/" + name); 58f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker if (index == null) { 59f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker return 0; 60f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker } 61f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker return index; 62f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker } 639931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 64f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker @Implementation 65b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public int getColor(int id) throws Resources.NotFoundException { 6625cbf6f16c0fc8e6524935e6fa3d70ec2a92ed25Phil Goodwin & Tyler Schultz return resourceLoader.getColorValue(id); 67b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 689931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 696b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesi @Implementation 706b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesi public Configuration getConfiguration() { 719931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante if (configuration == null) { 729931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante configuration = new Configuration(); 739931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante configuration.setToDefaults(); 749931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante } 7585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey if (configuration.locale == null) { 7685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey configuration.locale = Locale.getDefault(); 7785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey } 7840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return configuration; 796b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesi } 80b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 81de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 82b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public String getString(int id) throws Resources.NotFoundException { 8325cbf6f16c0fc8e6524935e6fa3d70ec2a92ed25Phil Goodwin & Tyler Schultz return resourceLoader.getStringValue(id); 84b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 85b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 86de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 87b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public String getString(int id, Object... formatArgs) throws Resources.NotFoundException { 88b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin String raw = getString(id); 89b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin return String.format(Locale.ENGLISH, raw, formatArgs); 90b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 91b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 92de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 939daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel public String getQuantityString(int id, int quantity, Object... formatArgs) throws Resources.NotFoundException { 949daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel String raw = getQuantityString(id, quantity); 959daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel return String.format(Locale.ENGLISH, raw, formatArgs); 969daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel } 979daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel 989daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel @Implementation 999daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel public String getQuantityString(int id, int quantity) throws Resources.NotFoundException { 1009daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel return resourceLoader.getPluralStringValue(id, quantity); 1019daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel } 1029daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel 1039daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel @Implementation 104b63be1295e9d42211bd466585850db5897222aa1Macarse public InputStream openRawResource(int id) throws Resources.NotFoundException { 10540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return resourceLoader.getRawValue(id); 106b63be1295e9d42211bd466585850db5897222aa1Macarse } 10740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 108b63be1295e9d42211bd466585850db5897222aa1Macarse @Implementation 109b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public String[] getStringArray(int id) throws Resources.NotFoundException { 11025cbf6f16c0fc8e6524935e6fa3d70ec2a92ed25Phil Goodwin & Tyler Schultz String[] arrayValue = resourceLoader.getStringArrayValue(id); 111b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin if (arrayValue == null) { 112b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin throw new Resources.NotFoundException(); 113b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 114b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin return arrayValue; 115b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 116b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 117de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 118bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin public CharSequence[] getTextArray(int id) throws Resources.NotFoundException { 119bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin return getStringArray(id); 120bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin } 121bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin 122bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin @Implementation 123b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public CharSequence getText(int id) throws Resources.NotFoundException { 124b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin return getString(id); 125b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 126fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen 127e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard public void setDensity(float density) { 128e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard this.density = density; 129e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard } 130e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard 1319931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante public void setDisplay(Display display) { 1329931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante this.display = display; 1339931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante displayMetrics = null; 1349931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante } 1359931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 136de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 137b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public DisplayMetrics getDisplayMetrics() { 138e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu if (displayMetrics == null) { 1399931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante if (display == null) { 1409931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante display = Robolectric.newInstanceOf(Display.class); 1419931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante } 1429931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 143e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu displayMetrics = new DisplayMetrics(); 144e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu display.getMetrics(displayMetrics); 145e07511e1e736d9deba522ab8d58ffabcc67d274bRick Kawala & Wei Wu } 146e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard displayMetrics.density = this.density; 147e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard return displayMetrics; 148b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 149b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 1509931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante @Implementation 151f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard public Drawable getDrawable(int drawableResourceId) throws Resources.NotFoundException { 152fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 1539931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante ResourceLoader resLoader = Robolectric.shadowOf(Robolectric.application).getResourceLoader(); 1549931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 1559931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante Drawable xmlDrawable = resLoader.getXmlDrawable(drawableResourceId); 1569931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante if (xmlDrawable != null) { 1579931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante return xmlDrawable; 1589931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante } 1599931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 1609931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante Drawable animDrawable = resLoader.getAnimDrawable(drawableResourceId); 1619931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante if (animDrawable != null) { 1629931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante return animDrawable; 1639931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante } 1649931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 1659931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante Drawable colorDrawable = resLoader.getColorDrawable(drawableResourceId); 1669931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante if (colorDrawable != null) { 1679931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante return colorDrawable; 1689931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante } 169fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen 170ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi if (resLoader.isNinePatchDrawable(drawableResourceId)) { 171ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi return new NinePatchDrawable(realResources, null); 172ea277a780371ce94fb402f7853daefc3a8580f0cMichael Portuesi } 1739931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 174fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen return new BitmapDrawable(realResources, BitmapFactory.decodeResource(realResources, drawableResourceId)); 1759931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante } 1769931c0dc82b7213f180aa4570bafdbb57ec563d7Spider Phil Plante 177de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 178fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin public float getDimension(int id) throws Resources.NotFoundException { 1799472d8faeb0c6fa20529234e7e2a7ebf967d1f32Michael Portuesi return resourceLoader.getDimenValue(id); 180fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin } 181b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 182fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin @Implementation 18348f3d7b9a3f4a9f3b719782cae007edac11ed454Wenhui Yao public int getInteger(int id) throws Resources.NotFoundException { 18448f3d7b9a3f4a9f3b719782cae007edac11ed454Wenhui Yao return resourceLoader.getIntegerValue( id ); 18548f3d7b9a3f4a9f3b719782cae007edac11ed454Wenhui Yao } 186fde330c24db2b7905368ac9d790787f250f7ecc7Jon Boekenoogen 18748f3d7b9a3f4a9f3b719782cae007edac11ed454Wenhui Yao @Implementation 188fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin public int getDimensionPixelSize(int id) throws Resources.NotFoundException { 189b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin // The int value returned from here is probably going to be handed to TextView.setTextSize(), 190b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin // which takes a float. Avoid int-to-float conversion errors by returning a value generated from this 191b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin // resource ID but which isn't too big (resource values in R.java are all greater than 0x7f000000). 192b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 193fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin return (int) getDimension(id); 194fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin } 195fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin 196fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin @Implementation 197fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin public int getDimensionPixelOffset(int id) throws Resources.NotFoundException { 198fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin return (int) getDimension(id); 199fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin } 200fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin 201114296321cba71f8133713306049ce3b411e8563Gonçalo Silva @Implementation 20240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams public AssetManager getAssets() { 203a6ff2c2b15018092af3a28697b521d1ca5e789f0Christian Williams & Phil Goodwin return ShadowAssetManager.bind(Robolectric.newInstanceOf(AssetManager.class), resourceLoader); 204114296321cba71f8133713306049ce3b411e8563Gonçalo Silva } 205fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin 206ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 207ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public final android.content.res.Resources.Theme newTheme() { 208ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return newInstanceOf(Resources.Theme.class); 209ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 210ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams 211ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implements(Resources.Theme.class) 212ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public static class ShadowTheme { 213ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 214ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public TypedArray obtainStyledAttributes(int[] attrs) { 215ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return obtainStyledAttributes(0, attrs); 216ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 217ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams 218ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 219ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public TypedArray obtainStyledAttributes(int resid, int[] attrs) throws android.content.res.Resources.NotFoundException { 220ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return obtainStyledAttributes(null, attrs, 0, 0); 221ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 222ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams 223ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 224ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) { 225ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return newInstanceOf(TypedArray.class); 226ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 227ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 228b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin} 229