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