133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
2fbb0d0180d8cb6163a466945736c8379fa166e17Ian Fisher & Tyler Schultz
3f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richardimport android.graphics.drawable.Drawable;
40b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisherimport com.google.android.maps.ItemizedOverlay;
54a82145dfa6ae70d8effaaa0784cbe0204e73769Ryan Richard & Tyler Schultzimport com.google.android.maps.OverlayItem;
6d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport com.google.android.maps.ShadowItemizedOverlayBridge;
722c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
822c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
9d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport com.xtremelabs.robolectric.internal.RealObject;
10d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz
11d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzimport java.util.ArrayList;
124a82145dfa6ae70d8effaaa0784cbe0204e73769Ryan Richard & Tyler Schultz
13daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin/**
14d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz * Shadow for {@code ItemizedOverlay} that keeps track of what has been called and enables the return value for
15daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin * {@link #hitTest(com.google.android.maps.OverlayItem, android.graphics.drawable.Drawable, int, int)} to be set up by
16daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin * tests.
17daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin */
180b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@Implements(ItemizedOverlay.class)
19d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultzpublic class ShadowItemizedOverlay<Item extends OverlayItem> {
20cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    private boolean isPopulated;
21cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    private boolean shouldHit;
22cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    private boolean lastFocusedIndexWasReset;
23d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    private ArrayList<Item> items = new ArrayList<Item>();
24d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz
25d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    @RealObject
26d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    private ItemizedOverlay<Item> realObject;
27adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams
28de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
290add4ea006647573fc11fac463c87842f2dcc403Christian Williams    public final void populate() {
30cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin        isPopulated = true;
31d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz
32d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz        items.clear();
33d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz        for (int i = 0; i < realObject.size(); i++) {
34d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz            items.add(getBridge().createItem(i));
35d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz        }
36d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    }
37d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz
38d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    @Implementation
39d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    public final Item getItem(int position) {
40d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz        return items.get(position);
41fbb0d0180d8cb6163a466945736c8379fa166e17Ian Fisher & Tyler Schultz    }
424a82145dfa6ae70d8effaaa0784cbe0204e73769Ryan Richard & Tyler Schultz
43de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
440add4ea006647573fc11fac463c87842f2dcc403Christian Williams    public boolean hitTest(OverlayItem item, android.graphics.drawable.Drawable drawable, int i, int i1) {
454a82145dfa6ae70d8effaaa0784cbe0204e73769Ryan Richard & Tyler Schultz        return shouldHit;
464a82145dfa6ae70d8effaaa0784cbe0204e73769Ryan Richard & Tyler Schultz    }
47fb791184744888c0ea514c9ba416c83b7b8a1fa9Phil Goodwin & Ryan Richard
48de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
490add4ea006647573fc11fac463c87842f2dcc403Christian Williams    public void setLastFocusedIndex(int i) {
50fb791184744888c0ea514c9ba416c83b7b8a1fa9Phil Goodwin & Ryan Richard        lastFocusedIndexWasReset = (i == -1);
51fb791184744888c0ea514c9ba416c83b7b8a1fa9Phil Goodwin & Ryan Richard    }
52f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard
53f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard    @Implementation
540add4ea006647573fc11fac463c87842f2dcc403Christian Williams    public static Drawable boundCenterBottom(Drawable drawable) {
55f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard        return drawable;
56f1e19869f68b5b04688cc9701c3e2bf73cd35f76Ryan Richard    }
57cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin
58daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin    /**
59daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     * Non-Android accessor that indicates whether {@link #setLastFocusedIndex(int)} has been called with a value other
60daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     * than -1.
61daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     *
62daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     * @return whether {@link #setLastFocusedIndex(int)} has been called with a value other
6340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams     *         than -1
64daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     */
65daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin    public boolean lastFocusedIndexWasReset() {
66daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin        return lastFocusedIndexWasReset;
67cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    }
68cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin
69cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    public void setIsPopulated(boolean isPopulated) {
70cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin        this.isPopulated = isPopulated;
71cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    }
72cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin
73daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin    public boolean isPopulated() {
74daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin        return isPopulated;
75cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    }
76cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin
77daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin    /**
78daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     * Sets up the return value for
79daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     * {@link #hitTest(com.google.android.maps.OverlayItem, android.graphics.drawable.Drawable, int, int)}
80daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     *
81daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     * @param shouldHit the value that
8240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams     *                  {@link #hitTest(com.google.android.maps.OverlayItem, android.graphics.drawable.Drawable, int, int)}
8340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams     *                  should return
84daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin     */
85cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    public void setShouldHit(boolean shouldHit) {
86cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin        this.shouldHit = shouldHit;
87cc54a84f7c9f42028529e545e50b043e83f53c1cChristian Williams & Phil Goodwin    }
88d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz
89d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    private ShadowItemizedOverlayBridge<Item> getBridge() {
90d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz        return new ShadowItemizedOverlayBridge<Item>(realObject);
91d59c8fe95798cb5caea853467c9e595b1d8ebd20Tyler Schultz    }
92fbb0d0180d8cb6163a466945736c8379fa166e17Ian Fisher & Tyler Schultz}
93