• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static org.robolectric.util.reflector.Reflector.reflector;
4 
5 import android.view.View;
6 import android.widget.Adapter;
7 import android.widget.AdapterView;
8 import android.widget.FrameLayout;
9 import org.robolectric.annotation.Implementation;
10 import org.robolectric.annotation.Implements;
11 import org.robolectric.annotation.RealObject;
12 import org.robolectric.shadow.api.Shadow;
13 import org.robolectric.util.reflector.Direct;
14 import org.robolectric.util.reflector.ForType;
15 
16 @SuppressWarnings({"UnusedDeclaration"})
17 @Implements(AdapterView.class)
18 public class ShadowAdapterView<T extends Adapter> extends ShadowViewGroup {
19   private static int ignoreRowsAtEndOfList = 0;
20 
21   @RealObject private AdapterView<T> realAdapterView;
22 
23   private AdapterView.OnItemSelectedListener itemSelectedListener;
24 
25   @Implementation
setOnItemSelectedListener( AdapterView.OnItemSelectedListener itemSelectedListener)26   protected void setOnItemSelectedListener(
27       AdapterView.OnItemSelectedListener itemSelectedListener) {
28     this.itemSelectedListener = itemSelectedListener;
29     reflector(AdapterViewReflector.class, realAdapterView)
30         .setOnItemSelectedListener(itemSelectedListener);
31   }
32 
getItemSelectedListener()33   public AdapterView.OnItemSelectedListener getItemSelectedListener() {
34     return itemSelectedListener;
35   }
36 
performItemClick(int position)37   public boolean performItemClick(int position) {
38     return realAdapterView.performItemClick(
39         realAdapterView.getChildAt(position),
40         position,
41         realAdapterView.getItemIdAtPosition(position));
42   }
43 
findIndexOfItemContainingText(String targetText)44   public int findIndexOfItemContainingText(String targetText) {
45     for (int i = 0; i < realAdapterView.getCount(); i++) {
46       View childView = realAdapterView.getAdapter().getView(i, null, new FrameLayout(realAdapterView.getContext()));
47       ShadowView shadowView = Shadow.extract(childView);
48       String innerText = shadowView.innerText();
49       if (innerText.contains(targetText)) {
50         return i;
51       }
52     }
53     return -1;
54   }
55 
findItemContainingText(String targetText)56   public View findItemContainingText(String targetText) {
57     int itemIndex = findIndexOfItemContainingText(targetText);
58     if (itemIndex == -1) {
59       return null;
60     }
61     return realAdapterView.getChildAt(itemIndex);
62   }
63 
clickFirstItemContainingText(String targetText)64   public void clickFirstItemContainingText(String targetText) {
65     int itemIndex = findIndexOfItemContainingText(targetText);
66     if (itemIndex == -1) {
67       throw new IllegalArgumentException("No item found containing text \"" + targetText + "\"");
68     }
69     performItemClick(itemIndex);
70   }
71 
populateItems()72   public void populateItems() {
73     realView.measure(0, 0);
74     realView.layout(0, 0, 100, 10000);
75   }
76 
selectItemWithText(String s)77   public void selectItemWithText(String s) {
78     int itemIndex = findIndexOfItemContainingText(s);
79     realAdapterView.setSelection(itemIndex);
80   }
81 
82   @ForType(AdapterView.class)
83   interface AdapterViewReflector {
84 
85     @Direct
setOnItemSelectedListener(AdapterView.OnItemSelectedListener itemSelectedListener)86     void setOnItemSelectedListener(AdapterView.OnItemSelectedListener itemSelectedListener);
87   }
88 }
89