ShadowView.java revision 3f78da998ce73c1c7c25798a7e7e4f19287eff23
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 26eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 36eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.content.Context; 46eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.content.res.Resources; 5ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williamsimport android.graphics.Bitmap; 6684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williamsimport android.util.AttributeSet; 7924f851cb0ec279b6974744ce623f25bdc657551Ryan Richardimport android.view.MotionEvent; 86eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.view.View; 9d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultzimport android.view.ViewGroup; 105411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williamsimport android.view.ViewParent; 113f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesiimport android.view.animation.Animation; 123f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi 13ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williamsimport com.xtremelabs.robolectric.Robolectric; 1422c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 1522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 1622c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject; 176eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 1886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport java.io.PrintStream; 1951fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultzimport java.util.HashMap; 2051fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultzimport java.util.Map; 21c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 2286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 2386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 24ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin/** 25ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Shadow implementation of {@code View} that simulates the behavior of this class. Supports listeners, focusability 26ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * (but not focus order), resource loading, visibility, tags, and tracks the size and shape of the view. 27ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 28198b49fe81283e340891361045a8bdeb01f35e04Tyler Schultz@SuppressWarnings({"UnusedDeclaration"}) 290b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@Implements(View.class) 30afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowView { 314a7b7902404d0c3743f96c043e3cc6b9069cf438Christian Williams @RealObject protected View realView; 326eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 336eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private int id; 34afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williams ShadowView parent; 3570e43520d16dba344ad0f2f96e5d9300880153ffPhil Goodwin & Tyler Schultz protected Context context; 364d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private boolean selected; 37810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore private View.OnClickListener onClickListener; 38c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz private Object tag; 39775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard private boolean enabled = true; 404d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private int visibility = View.VISIBLE; 414d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin int left; 424d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin int top; 434d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin int right; 444d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin int bottom; 454d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private int paddingLeft; 464d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private int paddingTop; 474d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private int paddingRight; 484d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private int paddingBottom; 494d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(0, 0); 5044ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams private Map<Integer, Object> tags = new HashMap<Integer, Object>(); 514d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private boolean clickable; 52254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin protected boolean focusable; 539729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin boolean focusableInTouchMode; 544d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private int backgroundResourceId = -1; 551f4067d01d9e2907f2d926b17d378cb40a379dcaRich Humphrey private int backgroundColor; 565411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams protected View.OnKeyListener onKeyListener; 574d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private boolean isFocused; 585411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams private View.OnFocusChangeListener onFocusChangeListener; 594d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin private boolean wasInvalidated; 60924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard private View.OnTouchListener onTouchListener; 61a2dd5bb88b4bfe0cbe77cfc3581ce42745509760Phil Goodwin & Tyler Schultz protected AttributeSet attributeSet; 62ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams private boolean drawingCacheEnabled; 633f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi private Animation animation; 646eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 656eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void __constructor__(Context context) { 663c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams __constructor__(context, null); 676eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 686eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 695189dc7b67bf8426200b68a998442ba821a27222Phil Goodwin & Tyler Schultz public void __constructor__(Context context, AttributeSet attributeSet) { 703c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams __constructor__(context, attributeSet, 0); 713c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams } 723c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams 733c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams public void __constructor__(Context context, AttributeSet attributeSet, int defStyle) { 743c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams this.context = context; 755189dc7b67bf8426200b68a998442ba821a27222Phil Goodwin & Tyler Schultz this.attributeSet = attributeSet; 763c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams 773c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams if (attributeSet != null) { 783c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams applyAttributes(); 793c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams } 803c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams } 813c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams 823c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams public void applyAttributes() { 835189dc7b67bf8426200b68a998442ba821a27222Phil Goodwin & Tyler Schultz applyIdAttribute(); 846be1495845e002cf1888bf1fe6b2ef1f43a0198dPhil Goodwin & Tyler Schultz applyVisibilityAttribute(); 8549e04b12550327c269ed8b826c71b1affe503336Phil Goodwin & Tyler Schultz applyEnabledAttribute(); 864cee28dd02fadbaec9b236f04ff15057fd866077Phil Goodwin & Tyler Schultz applyBackgroundAttribute(); 87684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williams } 88684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williams 89de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 906eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void setId(int id) { 916eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.id = id; 926eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 936eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 94de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 95cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz public void setClickable(boolean clickable) { 96cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz this.clickable = clickable; 97cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz } 98cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz 99ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 100ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Also sets focusable in touch mode to false if {@code focusable} is false, which is the Android behavior. 101ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * 102ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @param focusable the new status of the {@code View}'s focusability 103ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 104de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 105cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz public void setFocusable(boolean focusable) { 106cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz this.focusable = focusable; 107adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams if (!focusable) { 108415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard setFocusableInTouchMode(false); 109415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard } 110415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard } 111415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard 112415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard @Implementation 113415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard public final boolean isFocusableInTouchMode() { 114415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard return focusableInTouchMode; 115415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard } 116415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard 117ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 118ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Also sets focusable to true if {@code focusableInTouchMode} is true, which is the Android behavior. 119ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * 120ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @param focusableInTouchMode the new status of the {@code View}'s touch mode focusability 121ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 122415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard @Implementation 123415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard public void setFocusableInTouchMode(boolean focusableInTouchMode) { 124415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard this.focusableInTouchMode = focusableInTouchMode; 125adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams if (focusableInTouchMode) { 126415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard setFocusable(true); 127415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard } 128cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz } 129cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz 130de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 131254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin public boolean isFocusable() { 132254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin return focusable; 133254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin } 134254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin 135254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin @Implementation 1366eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getId() { 1376eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return id; 1386eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 1396eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 140ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 141ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Simulates the inflating of the requested resource. 142ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * 1438de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz * @param context the context from which to obtain a layout inflater 144ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @param resource the ID of the resource to inflate 1458de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz * @param root the {@code ViewGroup} to add the inflated {@code View} to 146ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return the inflated View 147ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 148de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 149a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz public static View inflate(Context context, int resource, ViewGroup root) { 15040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return ShadowLayoutInflater.from(context).inflate(resource, root); 151a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz } 152a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz 153ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 154ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Finds this {@code View} if it's ID is passed in, returns {@code null} otherwise 155ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * 156ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @param id the id of the {@code View} to find 157ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return the {@code View}, if found, {@code null} otherwise 158ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 159de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 1606eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public View findViewById(int id) { 161e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz if (id == this.id) { 162e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz return realView; 163e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz } 1646eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 1656eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return null; 1666eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 1676eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 168de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 1690c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol public View getRootView() { 170afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williams ShadowView root = this; 171adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams while (root.parent != null) { 1720c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol root = root.parent; 1730c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol } 1740c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol return root.realView; 1750c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol } 1760c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol 177de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 178d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz public ViewGroup.LayoutParams getLayoutParams() { 179d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz return layoutParams; 180d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz } 181d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz 182de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 183b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard public void setLayoutParams(ViewGroup.LayoutParams params) { 184b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard layoutParams = params; 185b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard } 186b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard 187de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 1885411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams public final ViewParent getParent() { 189a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz return parent == null ? null : (ViewParent) parent.realView; 1905411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams } 1915411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams 192de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 1936eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public final Context getContext() { 1946eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return context; 1956eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 1966eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 197de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 1986eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public Resources getResources() { 1996eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return context.getResources(); 2006eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 2016eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 202de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 2034d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin public void setBackgroundResource(int backgroundResourceId) { 2044d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin this.backgroundResourceId = backgroundResourceId; 2054d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin } 2064d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin 207de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 2086eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getVisibility() { 2096eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return visibility; 2106eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 2116eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 212de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 2136eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void setVisibility(int visibility) { 2146eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.visibility = visibility; 2156eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 216eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz 217de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 218eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz public void setSelected(boolean selected) { 219eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz this.selected = selected; 220eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz } 221810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore 222de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 223acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz public boolean isSelected() { 224acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz return this.selected; 225acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz } 226acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz 227de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 228775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard public boolean isEnabled() { 229775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard return this.enabled; 230775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard } 231adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams 232de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 233775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard public void setEnabled(boolean enabled) { 234775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard this.enabled = enabled; 235775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard } 236775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard 237de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 238810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore public void setOnClickListener(View.OnClickListener onClickListener) { 239810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore this.onClickListener = onClickListener; 240810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 241810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore 242de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 243810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore public boolean performClick() { 244810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore if (onClickListener != null) { 245810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore onClickListener.onClick(realView); 246810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore return true; 247810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } else { 248810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore return false; 249810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 250810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 251c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 252de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 2535411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams public void setOnKeyListener(View.OnKeyListener onKeyListener) { 2545411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams this.onKeyListener = onKeyListener; 2555411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams } 2565411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams 257de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 258c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz public Object getTag() { 259c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz return this.tag; 260c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz } 261c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 262de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 263c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz public void setTag(Object tag) { 264c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz this.tag = tag; 265c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz } 26618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 267de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 26818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public final int getHeight() { 269a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard return bottom - top; 27018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 27118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 272de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 27318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public final int getWidth() { 274a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard return right - left; 27518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 27618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 277de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 278924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard public final int getMeasuredWidth() { 279a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard return getWidth(); 280a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard } 281a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard 282de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 283a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard public final void layout(int l, int t, int r, int b) { 284a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard left = l; 285a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard top = t; 286a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard right = r; 287a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard bottom = b; 288a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard 289a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard// todo: realView.onLayout(); 290924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard } 291adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams 292de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 29318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public void setPadding(int left, int top, int right, int bottom) { 29418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingLeft = left; 29518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingTop = top; 29618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingRight = right; 29718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingBottom = bottom; 29818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 29918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 300de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 30118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingTop() { 30218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingTop; 30318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 30418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 305de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 30618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingLeft() { 30718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingLeft; 30818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 30918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 310de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 31118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingRight() { 31218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingRight; 31318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 31418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 315de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 31618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingBottom() { 31718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingBottom; 31818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 31951fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultz 320de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 32144ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams public Object getTag(int key) { 32244ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams return tags.get(key); 32344ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams } 32444ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams 325de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 32644ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams public void setTag(int key, Object value) { 32744ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams tags.put(key, value); 32844ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams } 3295411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams 33065e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams @Implementation 33165e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams public final boolean requestFocus() { 33265e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams return requestFocus(View.FOCUS_DOWN); 33365e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams } 33465e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams 33565e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams @Implementation 33665e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams public final boolean requestFocus(int direction) { 33765e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams setViewFocus(true); 33865e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams return true; 33965e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams } 34065e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams 3415411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams public void setViewFocus(boolean hasFocus) { 3429729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin this.isFocused = hasFocus; 3435411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams if (onFocusChangeListener != null) { 3445411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams onFocusChangeListener.onFocusChange(realView, hasFocus); 3455411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams } 3465411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams } 3475411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams 348de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 34965e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams public boolean isFocused() { 3509729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin return isFocused; 35165e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams } 35265e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams 35365e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams @Implementation 3545411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams public boolean hasFocus() { 3559729911f8638b6bb4d55b3d67e6d68a6b3f19dc7Phil Goodwin return isFocused; 3565411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams } 3575411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams 358de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 35965e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams public void clearFocus() { 36065e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams setViewFocus(false); 36165e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams } 36265e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams 36365e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams @Implementation 3645411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams public void setOnFocusChangeListener(View.OnFocusChangeListener listener) { 3655411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams onFocusChangeListener = listener; 3665411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams } 3671c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard 368de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 3691c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard public void invalidate() { 3701c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard wasInvalidated = true; 3711c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard } 372924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard 373de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 374924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard public void setOnTouchListener(View.OnTouchListener onTouchListener) { 375924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard this.onTouchListener = onTouchListener; 376924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard } 377924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard 378de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 379924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard public boolean dispatchTouchEvent(MotionEvent event) { 380924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard if (onTouchListener != null) { 381924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard return onTouchListener.onTouch(realView, event); 382924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard } 383924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard return false; 384924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard } 3852ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin 386ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 387da9cd404c0db2ebcef4ecfb50836de00b56622f1Christian Williams * Returns a string representation of this {@code View}. Unless overridden, it will be an empty string. 38840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams * <p/> 389da9cd404c0db2ebcef4ecfb50836de00b56622f1Christian Williams * Robolectric extension. 390ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 3912ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin public String innerText() { 3922ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin return ""; 3932ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin } 39486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 395ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 396ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Dumps the status of this {@code View} to {@code System.out} 397ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 39886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams public void dump() { 39986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams dump(System.out, 0); 40086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 40186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 402ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 403ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Dumps the status of this {@code View} to {@code System.out} at the given indentation level 404ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 40586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams public void dump(PrintStream out, int indent) { 40686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams dumpFirstPart(out, indent); 40786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams out.println("/>"); 40886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 40986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 41086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams protected void dumpFirstPart(PrintStream out, int indent) { 41186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams dumpIndent(out, indent); 41286e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 41386e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams out.print("<" + realView.getClass().getSimpleName()); 41486e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams if (id > 0) { 41586e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams out.print(" id=\"" + shadowOf(context).getResourceLoader().getNameForId(id) + "\""); 41686e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 41786e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 41886e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams 41986e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams protected void dumpIndent(PrintStream out, int indent) { 42086e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams for (int i = 0; i < indent; i++) out.print(" "); 42186e98619f5f1b5f6b1fd5742ba911d7ebc83c2ddChristian Williams } 4224d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 423ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 424ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return left side of the view 425ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 426bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams @Implementation 4274d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public int getLeft() { 4284d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin return left; 4294d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 4304d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 431ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 432ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return top coordinate of the view 433ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 434bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams @Implementation 4354d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public int getTop() { 4364d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin return top; 4374d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 4384d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 439ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 440ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return right side of the view 441ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 442bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams @Implementation 4434d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public int getRight() { 4444d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin return right; 4454d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 4464d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 447ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 448ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return bottom coordinate of the view 449ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 450bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams @Implementation 4514d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public int getBottom() { 4524d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin return bottom; 4534d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 4544d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 455ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 456ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return whether the view is clickable 457ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 458bbf6ae3d37d2303d8463094096ef0bb9906fd658Christian Williams @Implementation 4594d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public boolean isClickable() { 4604d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin return clickable; 4614d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 4624d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 463ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 464de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 465ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * 466ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return the resource ID of this views background 467ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 4684d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public int getBackgroundResourceId() { 4694d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin return backgroundResourceId; 4704d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 47140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 47240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams @Implementation 4731f4067d01d9e2907f2d926b17d378cb40a379dcaRich Humphrey public void setBackgroundColor(int color) { 47440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams backgroundColor = color; 4751f4067d01d9e2907f2d926b17d378cb40a379dcaRich Humphrey } 47640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 4771f4067d01d9e2907f2d926b17d378cb40a379dcaRich Humphrey public int getBackgroundColor() { 47840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return backgroundColor; 4791f4067d01d9e2907f2d926b17d378cb40a379dcaRich Humphrey } 48040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 481ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 482de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 483ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * 484ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * @return whether or not {@link #invalidate()} has been called 485ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 4864d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public boolean wasInvalidated() { 4874d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin return wasInvalidated; 4884d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 4894d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 490ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 491ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin * Clears the wasInvalidated flag 492ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 4934d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void clearWasInvalidated() { 4944d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin wasInvalidated = false; 4954d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 4964d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 497ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 498de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 499ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5004d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setLeft(int left) { 5014d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.left = left; 5024d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5034d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 504ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 505de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 506ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5074d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setTop(int top) { 5084d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.top = top; 5094d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5104d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 511ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 512de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 513ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5144d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setRight(int right) { 5154d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.right = right; 5164d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5174d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 518ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 519de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 520ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5214d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setBottom(int bottom) { 5224d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.bottom = bottom; 5234d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5244d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 525ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 526de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 527ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5284d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setPaddingLeft(int paddingLeft) { 5294d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.paddingLeft = paddingLeft; 5304d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5314d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 532ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 533de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 534ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5354d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setPaddingTop(int paddingTop) { 5364d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.paddingTop = paddingTop; 5374d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5384d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 539ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 540de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 541ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5424d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setPaddingRight(int paddingRight) { 5434d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.paddingRight = paddingRight; 5444d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5454d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 546ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 547de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 548ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5494d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setPaddingBottom(int paddingBottom) { 5504d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin this.paddingBottom = paddingBottom; 5514d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5524d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin 553ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin /** 554de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams * Non-Android accessor. 555ac58b328bde3c77d1d9687408e547faad3b77e2bPhil Goodwin */ 5564d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin public void setFocused(boolean focused) { 5574d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin isFocused = focused; 5584d709f74a8a630e677915cff8fba5e8b4888800fChristian Williams & Phil Goodwin } 5598de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz 5608de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz /** 5618de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz * Non-Android accessor. 5628de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz * 5638de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz * @return true if this object and all of its ancestors are {@code View.VISIBLE}, returns false if this or 5648de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz * any ancestor is not {@code View.VISIBLE} 5658de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz */ 5668de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz public boolean derivedIsVisible() { 5678de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz View parent = realView; 5688de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz while (parent != null) { 5698de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz if (parent.getVisibility() != View.VISIBLE) { 5708de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz return false; 5718de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz } 5728de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz parent = (View) parent.getParent(); 5738de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz } 5748de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz return true; 5758de53d85207b90879fd242796941d526277b1245Phil Goodwin & Tyler Schultz } 576c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz 577c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz /** 578c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz * Utility method for clicking on views exposing testing scenarios that are not possible when using the actual app. 579c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz * 580c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz * @throws RuntimeException if the view is disabled or if the view or any of its parents are not visible. 581c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz */ 582c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz public boolean checkedPerformClick() { 583c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz if (!derivedIsVisible()) { 584c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz throw new RuntimeException("View is not visible and cannot be clicked"); 585c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz } 586c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz if (!realView.isEnabled()) { 587c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz throw new RuntimeException("View is not enabled and cannot be clicked"); 588c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz } 589c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz 590c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz return realView.performClick(); 591c140c89564a145280adf65188f25303e850d3a9cPhil Goodwin & Tyler Schultz } 5925101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz 59306dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz public void applyFocus() { 59406dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz if (noParentHasFocus(realView)) { 59506dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz Boolean focusRequested = attributeSet.getAttributeBooleanValue("android", "focus", false); 59606dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz if (focusRequested || realView.isFocusableInTouchMode()) { 59706dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz realView.requestFocus(); 59806dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz } 59906dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz } 6005101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz } 6015101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz 6025189dc7b67bf8426200b68a998442ba821a27222Phil Goodwin & Tyler Schultz private void applyIdAttribute() { 6035189dc7b67bf8426200b68a998442ba821a27222Phil Goodwin & Tyler Schultz Integer id = attributeSet.getAttributeResourceValue("android", "id", 0); 6045189dc7b67bf8426200b68a998442ba821a27222Phil Goodwin & Tyler Schultz if (getId() == 0) { 6055189dc7b67bf8426200b68a998442ba821a27222Phil Goodwin & Tyler Schultz setId(id); 6062bc51e5a1e4d54158f7ff81af442d306fcd9a449Phil Goodwin & Tyler Schultz } 6072bc51e5a1e4d54158f7ff81af442d306fcd9a449Phil Goodwin & Tyler Schultz } 6082bc51e5a1e4d54158f7ff81af442d306fcd9a449Phil Goodwin & Tyler Schultz 6096be1495845e002cf1888bf1fe6b2ef1f43a0198dPhil Goodwin & Tyler Schultz private void applyVisibilityAttribute() { 6106be1495845e002cf1888bf1fe6b2ef1f43a0198dPhil Goodwin & Tyler Schultz String visibility = attributeSet.getAttributeValue("android", "visibility"); 6115101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz if (visibility != null) { 6125101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz if (visibility.equals("gone")) { 6135101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz setVisibility(View.GONE); 6145101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz } else if (visibility.equals("invisible")) { 6155101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz setVisibility(View.INVISIBLE); 6165101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz } 6175101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz } 6185101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz } 6195101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz 62049e04b12550327c269ed8b826c71b1affe503336Phil Goodwin & Tyler Schultz private void applyEnabledAttribute() { 62149e04b12550327c269ed8b826c71b1affe503336Phil Goodwin & Tyler Schultz setEnabled(attributeSet.getAttributeBooleanValue("android", "enabled", true)); 6225101cf6874bcc7ceef92354819497ea9cea04c22Phil Goodwin & Tyler Schultz } 62319d90b633936ae8dacbc7b09a8e44b2ad90be497Phil Goodwin & Tyler Schultz 6244cee28dd02fadbaec9b236f04ff15057fd866077Phil Goodwin & Tyler Schultz private void applyBackgroundAttribute() { 62540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams String source = attributeSet.getAttributeValue("android", "background"); 62640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams if (source != null) { 62740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams if (source.startsWith("@drawable/")) { 62840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams setBackgroundResource(attributeSet.getAttributeResourceValue("android", "background", 0)); 62940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams } 63040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams } 6316d2ed84f8604e5022dd0576567bf3a0bd0e22403Macarse } 6326d2ed84f8604e5022dd0576567bf3a0bd0e22403Macarse 63306dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz private boolean noParentHasFocus(View view) { 63419d90b633936ae8dacbc7b09a8e44b2ad90be497Phil Goodwin & Tyler Schultz while (view != null) { 63506dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz if (view.hasFocus()) return false; 63619d90b633936ae8dacbc7b09a8e44b2ad90be497Phil Goodwin & Tyler Schultz view = (View) view.getParent(); 63719d90b633936ae8dacbc7b09a8e44b2ad90be497Phil Goodwin & Tyler Schultz } 63806dfb798c2833348ed593991759fb581f7c7b20dPhil Goodwin & Tyler Schultz return true; 63919d90b633936ae8dacbc7b09a8e44b2ad90be497Phil Goodwin & Tyler Schultz } 6400ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi 6410ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi /** 6420ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi * Non-android accessor. Returns touch listener, if set. 6430ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi * 6440ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi * @return 6450ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi */ 6460ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi public View.OnTouchListener getOnTouchListener() { 6470ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi return onTouchListener; 6480ed02e080ff9f471642662ba0678db1d42221343Michael Portuesi } 649ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams 650b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams @Implementation 651ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams public void setDrawingCacheEnabled(boolean drawingCacheEnabled) { 652ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams this.drawingCacheEnabled = drawingCacheEnabled; 653ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams } 654ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams 655b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams @Implementation 656ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams public boolean isDrawingCacheEnabled() { 657ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams return drawingCacheEnabled; 658ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams } 659ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams 660b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams @Implementation 661ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams public Bitmap getDrawingCache() { 662ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams return Robolectric.newInstanceOf(Bitmap.class); 663ae26238c7d01caef84ceddd8ffb42c32306918d6Josh Lauer & Christian Williams } 66440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 66534f3d7cb9f41c9480d7b7b4e03be6df4c1c8021fRich Humphrey @Implementation 66634f3d7cb9f41c9480d7b7b4e03be6df4c1c8021fRich Humphrey public void post(Runnable action) { 66734f3d7cb9f41c9480d7b7b4e03be6df4c1c8021fRich Humphrey Robolectric.getUiThreadScheduler().post(action); 66834f3d7cb9f41c9480d7b7b4e03be6df4c1c8021fRich Humphrey } 669b020d9a038a8d1274806e1cccbc015f559396f05Christian Williams 670b020d9a038a8d1274806e1cccbc015f559396f05Christian Williams @Implementation 671b020d9a038a8d1274806e1cccbc015f559396f05Christian Williams public void postDelayed(Runnable action, long delayMills) { 672b020d9a038a8d1274806e1cccbc015f559396f05Christian Williams Robolectric.getUiThreadScheduler().postDelayed(action, delayMills); 673b020d9a038a8d1274806e1cccbc015f559396f05Christian Williams } 6743f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi 6753f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi @Implementation 6763f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi public Animation getAnimation() { 6773f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi return animation; 6783f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi } 6793f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi 6803f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi @Implementation 6813f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi public void setAnimation(Animation anim) { 6823f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi animation = anim; 6833f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi } 6843f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi 6853f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi @Implementation 6863f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi public void startAnimation(Animation anim) { 6873f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi setAnimation(anim); 6883f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi animation.start(); 6893f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi } 6903f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi 6913f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi @Implementation 6923f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi public void clearAnimation() { 6933f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi if ( animation != null ) { 6943f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi animation.cancel(); 6953f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi } 6963f78da998ce73c1c7c25798a7e7e4f19287eff23Michael Portuesi } 6976eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz} 698