ShadowResources.java revision fac8bbf7dfc7904540716be8649b2f5a5c9f6d15
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 3a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport static com.xtremelabs.robolectric.Robolectric.newInstanceOf; 4a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 5a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowham 6a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport java.io.InputStream; 7a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport java.lang.reflect.Field; 8a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport java.util.Locale; 9a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowham 1070a3ec81f0bda52d8388facf562a80e2d16ac96fGonçalo Silvaimport android.content.res.AssetManager; 116b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesiimport android.content.res.Configuration; 12b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.content.res.Resources; 13ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williamsimport android.content.res.TypedArray; 14b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williamsimport android.graphics.BitmapFactory; 15a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport android.graphics.drawable.AnimationDrawable; 16b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.graphics.drawable.BitmapDrawable; 17a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport android.graphics.drawable.ColorDrawable; 18b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.graphics.drawable.Drawable; 19a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowhamimport android.text.TextUtils; 20ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williamsimport android.util.AttributeSet; 21b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwinimport android.util.DisplayMetrics; 22a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowham 2370a3ec81f0bda52d8388facf562a80e2d16ac96fGonçalo Silvaimport com.xtremelabs.robolectric.Robolectric; 2422c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 2522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 26f64d95f87eb9715622e3f77eb0b369d60270054cChristian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject; 27f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakkerimport com.xtremelabs.robolectric.res.ResourceExtractor; 283f1d4fe696c2f3efe99b8ef39868c064928efb1aTyler Schultzimport com.xtremelabs.robolectric.res.ResourceLoader; 29b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 3059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin/** 3159d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * Shadow of {@code Resources} that simulates the loading of resources 3259d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * 3359d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * @see com.xtremelabs.robolectric.RobolectricTestRunner#RobolectricTestRunner(Class, String, String) 3459d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin */ 35b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin@SuppressWarnings({"UnusedDeclaration"}) 36b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin@Implements(Resources.class) 37afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowResources { 38e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard private float density = 1.0f; 39e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard 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 47b01474a3329222965d31068f5c33e59c6e6aa6a4Josh Lauer & Christian Williams @RealObject Resources realResources; 4808d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams private ResourceLoader resourceLoader; 4908d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams 50de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 51f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker public int getIdentifier(String name, String defType, String defPackage) { 52f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker Integer index = 0; 53f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker 54f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker ResourceExtractor resourceExtractor = resourceLoader.getResourceExtractor(); 55f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker 56f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker index = resourceExtractor.getResourceId(defType + "/" + name); 57f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker if (index == null) { 58f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker return 0; 59f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker } 60f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker return index; 61f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker } 62f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker 63f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker @Implementation 64b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public int getColor(int id) throws Resources.NotFoundException { 6525cbf6f16c0fc8e6524935e6fa3d70ec2a92ed25Phil Goodwin & Tyler Schultz return resourceLoader.getColorValue(id); 66b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 6740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 686b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesi @Implementation 696b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesi public Configuration getConfiguration() { 7040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams Configuration configuration = new Configuration(); 7140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams configuration.setToDefaults(); 7285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey if (configuration.locale == null) { 7385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey configuration.locale = Locale.getDefault(); 7485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey } 7540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return configuration; 766b77d40267d9b2d4d1b3e206f7d1bdd60a91d8c8Michael Portuesi } 77b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 78de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 79b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public String getString(int id) throws Resources.NotFoundException { 8025cbf6f16c0fc8e6524935e6fa3d70ec2a92ed25Phil Goodwin & Tyler Schultz return resourceLoader.getStringValue(id); 81b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 82b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 83de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 84b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public String getString(int id, Object... formatArgs) throws Resources.NotFoundException { 85b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin String raw = getString(id); 86b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin return String.format(Locale.ENGLISH, raw, formatArgs); 87b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 88b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 89de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 909daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel public String getQuantityString(int id, int quantity, Object... formatArgs) throws Resources.NotFoundException { 919daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel String raw = getQuantityString(id, quantity); 929daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel return String.format(Locale.ENGLISH, raw, formatArgs); 939daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel } 949daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel 959daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel @Implementation 969daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel public String getQuantityString(int id, int quantity) throws Resources.NotFoundException { 979daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel return resourceLoader.getPluralStringValue(id, quantity); 989daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel } 999daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel 1009daa83d905eccca3b027ce27e4a77b3f57441a1eJan Berkel @Implementation 101b63be1295e9d42211bd466585850db5897222aa1Macarse public InputStream openRawResource(int id) throws Resources.NotFoundException { 10240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return resourceLoader.getRawValue(id); 103b63be1295e9d42211bd466585850db5897222aa1Macarse } 10440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 105b63be1295e9d42211bd466585850db5897222aa1Macarse @Implementation 106b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public String[] getStringArray(int id) throws Resources.NotFoundException { 10725cbf6f16c0fc8e6524935e6fa3d70ec2a92ed25Phil Goodwin & Tyler Schultz String[] arrayValue = resourceLoader.getStringArrayValue(id); 108b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin if (arrayValue == null) { 109b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin throw new Resources.NotFoundException(); 110b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 111b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin return arrayValue; 112b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 113b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 114de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 115bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin public CharSequence[] getTextArray(int id) throws Resources.NotFoundException { 116bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin return getStringArray(id); 117bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin } 118bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin 119bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin @Implementation 120b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public CharSequence getText(int id) throws Resources.NotFoundException { 121b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin return getString(id); 122b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 123b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 124e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard public void setDensity(float density) { 125e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard this.density = density; 126e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard } 127e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard 128de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 129b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin public DisplayMetrics getDisplayMetrics() { 130e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard DisplayMetrics displayMetrics = new DisplayMetrics(); 131e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard displayMetrics.density = this.density; 132e02d2608f3fa739dd328c6b44a2122b9dfb73bedLowell Kirsh & Ryan Richard return displayMetrics; 133b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 134b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 135a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowham @Implementation 136f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard public Drawable getDrawable(int drawableResourceId) throws Resources.NotFoundException { 137fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 138fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham ResourceLoader resLoader = Robolectric.shadowOf( Robolectric.application ).getResourceLoader(); 139a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowham 140fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham // Check if this drawable is an XML drawable 141fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham Drawable xmlDrawable = resLoader.getXmlDrawable( drawableResourceId ); 142fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham if( xmlDrawable != null ) { return xmlDrawable; } 143a7b64b610c4c404aa6ace2289cd3c41916573b28adriancowham 144fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham Drawable animDrawable = resLoader.getAnimDrawable( drawableResourceId ); 145fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham if( animDrawable != null ) { return animDrawable; } 146fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 147fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham Drawable colorDrawable = resLoader.getColorDrawable( drawableResourceId ); 148fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham if( colorDrawable != null ) { return colorDrawable; } 149b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 150fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham return new BitmapDrawable(BitmapFactory.decodeResource(realResources, drawableResourceId)); 151fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham } 152fac8bbf7dfc7904540716be8649b2f5a5c9f6d15adriancowham 153de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 154fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin public float getDimension(int id) throws Resources.NotFoundException { 155fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin // todo: get this value from the xml resources and scale it by display metrics [xw 20101011] 15608d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams if (resourceLoader.dimensions.containsKey(id)) { 15708d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams return resourceLoader.dimensions.get(id); 158fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin } 159fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin return id - 0x7f000000; 160fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin } 161b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 162fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin @Implementation 163fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin public int getDimensionPixelSize(int id) throws Resources.NotFoundException { 164b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin // The int value returned from here is probably going to be handed to TextView.setTextSize(), 165b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin // which takes a float. Avoid int-to-float conversion errors by returning a value generated from this 166b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin // resource ID but which isn't too big (resource values in R.java are all greater than 0x7f000000). 167b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin 168fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin return (int) getDimension(id); 169fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin } 170fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin 171fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin @Implementation 172fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin public int getDimensionPixelOffset(int id) throws Resources.NotFoundException { 173fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin return (int) getDimension(id); 174fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin } 175fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin 176114296321cba71f8133713306049ce3b411e8563Gonçalo Silva @Implementation 17740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams public AssetManager getAssets() { 178a6ff2c2b15018092af3a28697b521d1ca5e789f0Christian Williams & Phil Goodwin return ShadowAssetManager.bind(Robolectric.newInstanceOf(AssetManager.class), resourceLoader); 179114296321cba71f8133713306049ce3b411e8563Gonçalo Silva } 180fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin 181ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 182ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public final android.content.res.Resources.Theme newTheme() { 183ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return newInstanceOf(Resources.Theme.class); 184ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 185ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams 18659d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin /** 18759d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * Non-Android accessor that sets the value to be returned by {@link #getDimension(int)} 18859d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * 18940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams * @param id ID to set the dimension for 19059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * @param value value to be returned 19159d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin */ 192fba19865a86f986189561f961a27f664eb23ce38Chee Wong & Phil Goodwin public void setDimension(int id, int value) { 19308d5f9aec95a889473eaff1f5d6afefbaa2bd489Christian Williams resourceLoader.dimensions.put(id, value); 194b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin } 195ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams 196ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implements(Resources.Theme.class) 197ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public static class ShadowTheme { 198ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 199ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public TypedArray obtainStyledAttributes(int[] attrs) { 200ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return obtainStyledAttributes(0, attrs); 201ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 202ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams 203ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 204ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public TypedArray obtainStyledAttributes(int resid, int[] attrs) throws android.content.res.Resources.NotFoundException { 205ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return obtainStyledAttributes(null, attrs, 0, 0); 206ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 207ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams 208ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams @Implementation 209ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams public TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) { 210ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams return newInstanceOf(TypedArray.class); 211ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 212ec63d3ad017965dc341bd0ce15f07c65f35b4a90Christian Williams } 213b63effe7b28319e0430f0baa9b8d1b8ddd3ff307Christian Williams & Phil Goodwin} 214