ShadowViewGroup.java revision 86e98619f5f1b5f6b1fd5742ba911d7ebc83c2dd
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 26eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 32ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwinimport android.view.View; 46eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.view.ViewGroup; 5a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzimport com.xtremelabs.robolectric.util.Implementation; 6a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzimport com.xtremelabs.robolectric.util.Implements; 76eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport java.io.PrintStream; 963bd7c4e869525014879db3428e17eb4d2728cf9Christian Williamsimport java.util.ArrayList; 1063bd7c4e869525014879db3428e17eb4d2728cf9Christian Williamsimport java.util.List; 1163bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 12a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 13a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams 140b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@SuppressWarnings({"UnusedDeclaration"}) 150b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@Implements(ViewGroup.class) 16afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowViewGroup extends ShadowView { 1763bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams private List<View> children = new ArrayList<View>(); 1863bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 1963bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams @Implementation 2063bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams @Override 2163bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams public View findViewById(int id) { 2263bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams if (id == getId()) { 2363bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams return realView; 2463bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 2563bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 2663bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams for (View child : children) { 2763bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams View found = child.findViewById(id); 2863bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams if (found != null) { 2963bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams return found; 3063bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 3163bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 3263bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams return null; 3363bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 3463bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 3563bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams @Implementation 3663bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams public void addView(View child) { 3763bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams children.add(child); 38a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams shadowOf(child).parent = this; 3963bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 4063bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 4163bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams @Implementation 4263bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams public int getChildCount() { 4363bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams return children.size(); 4463bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 4563bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 4663bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams @Implementation 4763bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams public View getChildAt(int index) { 4863bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams return children.get(index); 4963bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 5063bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 5163bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams @Implementation 5263bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams public void removeAllViews() { 5363bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams for (View child : children) { 54a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams shadowOf(child).parent = null; 5563bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 5663bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams children.clear(); 5763bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 5863bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 5963bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams @Implementation 6063bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams public void removeViewAt(int position) { 61a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams shadowOf(children.remove(position)).parent = null; 6263bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams } 6363bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams 649729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin @Override @Implementation 659729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin public boolean hasFocus() { 669729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin if (super.hasFocus()) return true; 679729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 689729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin for (View child : children) { 699729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin if (child.hasFocus()) return true; 709729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 719729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 729729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin return false; 739729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 749729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 759729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin @Implementation 769729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin @Override 779729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin public void clearFocus() { 789729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin if (hasFocus()) { 799729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin super.clearFocus(); 809729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 819729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin for (View child : children) { 829729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin child.clearFocus(); 839729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 849729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 859729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin } 869729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin 872ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin @Override 882ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin public String innerText() { 892ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin String innerText = ""; 90a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz String delimiter = ""; 91a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz 922ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin for (int i = 0; i < getChildCount(); i++) { 932ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin View child = getChildAt(i); 94a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams String childText = shadowOf(child).innerText(); 95a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz if (childText.length() > 0) { 96a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz innerText += delimiter; 97a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz delimiter = " "; 982ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin } 992ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin innerText += childText; 1002ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin } 1012ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin return innerText; 1022ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin } 10386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 10486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams @Override public void dump(PrintStream out, int indent) { 10586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams dumpFirstPart(out, indent); 10686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams if (children.size() > 0) { 10786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams out.println(">"); 10886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 10986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams for (View child : children) { 11086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams shadowOf(child).dump(out, indent + 2); 11186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 11286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 11386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams dumpIndent(out, indent); 11486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams out.println("</" + realView.getClass().getSimpleName() + ">"); 11586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } else { 11686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams out.println("/>"); 11786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 11886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 1196eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz} 120