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