133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard 322d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppyimport android.content.res.Resources; 4c195766c9cdf11194bd8ce283975b05947a232bfJoe Moore & Ryan Richardimport android.graphics.Bitmap; 522d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppyimport android.graphics.BitmapFactory; 6f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richardimport android.graphics.Rect; 7f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richardimport android.graphics.drawable.BitmapDrawable; 8f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richardimport android.graphics.drawable.Drawable; 922d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppyimport android.util.TypedValue; 1022d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 11c195766c9cdf11194bd8ce283975b05947a232bfJoe Moore & Ryan Richardimport com.xtremelabs.robolectric.Robolectric; 1222c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 1322c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 14f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject; 15f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard 16f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richardimport java.io.InputStream; 17be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Mooreimport java.util.ArrayList; 18f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard 19f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwinimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 20f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin 21f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard@SuppressWarnings({"UnusedDeclaration"}) 22f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard@Implements(Drawable.class) 23afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowDrawable { 2407e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard private static int defaultIntrinsicWidth = -1; 2507e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard private static int defaultIntrinsicHeight = -1; 26be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore static ArrayList<String> corruptStreamSources = new ArrayList<String>(); 2707e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard 28f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin @RealObject Drawable realObject; 29f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin 30cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin private Rect bounds = new Rect(0, 0, 0, 0); 3107e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard private int intrinsicWidth = defaultIntrinsicWidth; 3207e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard private int intrinsicHeight = defaultIntrinsicHeight; 33943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard private int alpha; 34a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz private InputStream inputStream; 35a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz private int level; 3601c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard private int loadedFromResourceId = -1; 37be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry private boolean wasInvalidated; 38f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard 39f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard @Implementation 40f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard public static Drawable createFromStream(InputStream is, String srcName) { 41be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore if (corruptStreamSources.contains(srcName)) { 42be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore return null; 43be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore } 44c195766c9cdf11194bd8ce283975b05947a232bfJoe Moore & Ryan Richard BitmapDrawable drawable = new BitmapDrawable(Robolectric.newInstanceOf(Bitmap.class)); 4597ffcf00dfda4a2c5c67264df1ce9ee64c925823Ryan Richard shadowOf(drawable).setSource(srcName); 46a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz shadowOf(drawable).setInputStream(is); 4797ffcf00dfda4a2c5c67264df1ce9ee64c925823Ryan Richard return drawable; 48f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard } 49f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard 50f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard @Implementation 5122d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public static Drawable createFromResourceStream(Resources res, TypedValue value, InputStream is, String srcName) { 5222d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy return createFromStream(is, srcName); 5322d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 5422d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 5522d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Implementation 5622d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy public static Drawable createFromResourceStream(Resources res, TypedValue value, InputStream is, String srcName, BitmapFactory.Options opts) { 5722d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy return createFromStream(is, srcName); 5822d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy } 5922d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy 6022d17eb1febbe07fdb6785467273e48c0ab1ed4fJohn Stuppy @Implementation 613eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry public static Drawable createFromPath(String pathName) { 623eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry BitmapDrawable drawable = new BitmapDrawable(Robolectric.newInstanceOf(Bitmap.class)); 633eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry shadowOf(drawable).setPath(pathName); 643eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry return drawable; 653eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry } 663eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry 67e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard public static Drawable createFromResourceId(int resourceId) { 68e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard Bitmap bitmap = Robolectric.newInstanceOf(Bitmap.class); 69e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard shadowOf(bitmap).setLoadedFromResourceId(resourceId); 70e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard BitmapDrawable drawable = new BitmapDrawable(bitmap); 71e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard return drawable; 72e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard } 73e429b89e0edf6b77099f40e7e3af40b0cc1e7fc4Amrit Thakur & Ryan Richard 743eeaacd94b8bf41d08dfc7d93cbebb5936842020Chris Perry @Implementation 75f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard public final Rect getBounds() { 76f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard return bounds; 77f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard } 78f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard 79bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams @Implementation 80cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin public void setBounds(Rect rect) { 81cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin this.bounds = rect; 82cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin } 83cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin 84f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard @Implementation 85a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard public void setBounds(int left, int top, int right, int bottom) { 86a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard bounds = new Rect(left, top, right, bottom); 87a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard } 88a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard 89a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard @Implementation 907bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato public Rect copyBounds() { 917bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato Rect bounds = new Rect(); 927bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato copyBounds(bounds); 937bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato return bounds; 947bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato } 957bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato 967bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato @Implementation 977bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato public void copyBounds(Rect bounds) { 987bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato bounds.set(getBounds()); 997bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato } 1007bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato 1017bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato @Implementation 102f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard public int getIntrinsicWidth() { 103f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard return intrinsicWidth; 104f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard } 105f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard 106a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard @Implementation 107a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard public int getIntrinsicHeight() { 108a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard return intrinsicHeight; 109a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard } 110cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin 111be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore public static void addCorruptStreamSource(String src) { 112be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore corruptStreamSources.add(src); 113be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore } 114be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 11507e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard public static void setDefaultIntrinsicWidth(int defaultIntrinsicWidth) { 11607e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard ShadowDrawable.defaultIntrinsicWidth = defaultIntrinsicWidth; 11707e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard } 11807e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard 11907e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard public static void setDefaultIntrinsicHeight(int defaultIntrinsicHeight) { 12007e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard ShadowDrawable.defaultIntrinsicHeight = defaultIntrinsicHeight; 12107e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard } 12207e6c6574361950efbc98100729ccc2646c60000Chris Heisterkamp & Ryan Richard 123cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin public void setIntrinsicWidth(int intrinsicWidth) { 124cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin this.intrinsicWidth = intrinsicWidth; 125cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin } 126cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin 127cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin public void setIntrinsicHeight(int intrinsicHeight) { 128cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin this.intrinsicHeight = intrinsicHeight; 129cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin } 130f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin 131a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz public InputStream getInputStream() { 132a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz return inputStream; 133a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz } 134a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz 135a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz public void setInputStream(InputStream inputStream) { 136a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz this.inputStream = inputStream; 137a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz } 138a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz 139a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz @Implementation 140a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz public int getLevel() { 141a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz return level; 142a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz } 143a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz 144a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz @Implementation 145a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz public boolean setLevel(int level) { 146a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz this.level = level; 147a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz // This should return true if the new level causes a layout change. 148a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz // Doing this in robolectric would require parsing level sets which 149a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz // is not currently supported. 150a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz return false; 151a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz } 152a739b57a6b1a99f14d586f609f0f62f48b8e2284Ian Fisher & Tyler Schultz 153f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin @Override @Implementation 154f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin public boolean equals(Object o) { 155f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin if (realObject == o) return true; 156f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin if (o == null || realObject.getClass() != o.getClass()) return false; 157f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin 158f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin ShadowDrawable that = shadowOf((Drawable) o); 159f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin 160f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin if (intrinsicHeight != that.intrinsicHeight) return false; 161f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin if (intrinsicWidth != that.intrinsicWidth) return false; 162f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin if (bounds != null ? !bounds.equals(that.bounds) : that.bounds != null) return false; 163f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin 164f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin return true; 165f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin } 166f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin 167f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin @Override @Implementation 168f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin public int hashCode() { 169f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin int result = bounds != null ? bounds.hashCode() : 0; 170f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin result = 31 * result + intrinsicWidth; 171f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin result = 31 * result + intrinsicHeight; 172f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin return result; 173f58c6545761402d3ad215566a49b0add7f6192d3Christian Williams & Phil Goodwin } 174943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard 175943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard @Implementation 176943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard public void setAlpha(int alpha) { 177943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard this.alpha = alpha; 178943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard } 179943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard 180be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry @Implementation 181be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry public void invalidateSelf() { 182be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry wasInvalidated = true; 183be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry } 184be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry 185943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard public int getAlpha() { 186943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard return alpha; 187943e068baab69a32d09bfe0dcb5901911224d1baLowell Kirsh & Ryan Richard } 188be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore 189be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore public static void reset() { 190be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore corruptStreamSources.clear(); 191be87a589a85b713d1755c36b2eca8462177f91f3David Farber & Joe Moore } 19201c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 19301c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public int getLoadedFromResourceId() { 19401c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard return loadedFromResourceId; 19501c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 19601c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard 19701c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard public void setLoadedFromResourceId(int resourceId) { 19801c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard loadedFromResourceId = resourceId; 19901c59a01c55d6cfd4b3da34a5036ba9a1c314dc2Aaron VonderHaar & Ryan Richard } 200be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry 201be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry public boolean wasInvalidated() { 202be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry return wasInvalidated; 203be2bfccace90099e150bae69ddfef42f501e997cAaron VonderHaar & Chris Perry } 204f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard} 205