ShadowView.java revision 775ccf7ae53d9b4c77d3adf2514f26747cebd89c
16eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzpackage com.xtremelabs.droidsugar.view; 26eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 36eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.content.Context; 46eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.content.res.Resources; 56eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.view.View; 60c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugolimport com.xtremelabs.droidsugar.ProxyDelegatingHandler; 76eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 8c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultzimport java.util.ArrayList; 9c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultzimport java.util.List; 10c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 11198b49fe81283e340891361045a8bdeb01f35e04Tyler Schultz@SuppressWarnings({"UnusedDeclaration"}) 126eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzpublic class FakeView { 136eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private View realView; 146eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 156eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private int id; 166eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private List<View> children = new ArrayList<View>(); 170c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol private FakeView parent; 186eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private Context context; 196eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private int visibility; 20eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz public boolean selected; 21810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore private View.OnClickListener onClickListener; 22c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz private Object tag; 23775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard private boolean enabled = true; 246eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 256eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public FakeView(View view) { 266eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.realView = view; 276eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 286eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 296eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void __constructor__(Context context) { 306eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.context = context; 316eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 326eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 336eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void setId(int id) { 346eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.id = id; 356eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 366eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 376eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getId() { 386eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return id; 396eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 406eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 416eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public View findViewById(int id) { 42e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz if (id == this.id) { 43e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz return realView; 44e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz } 456eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 46e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz for (View child : children) { 476eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz View found = child.findViewById(id); 486eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz if (found != null) { 496eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return found; 506eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 516eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 526eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return null; 536eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 546eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 550c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol public View getRootView() { 560c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol FakeView root = this; 570c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol while(root.parent != null) { 580c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol root = root.parent; 590c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol } 600c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol return root.realView; 610c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol } 620c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol 636eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void addView(View child) { 646eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz children.add(child); 65ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore childProxy(child).parent = this; 66ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore } 67ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore 68ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore private FakeView childProxy(View child) { 69ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore return (FakeView) ProxyDelegatingHandler.getInstance().proxyFor(child); 706eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 716eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 726eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getChildCount() { 736eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return children.size(); 746eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 756eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 766eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public View getChildAt(int index) { 776eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return children.get(index); 786eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 796eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 80ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore public void removeAllViews() { 81ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore for (View child : children) { 82ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore childProxy(child).parent = null; 83ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore } 84ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore children.clear(); 85ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore } 86ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore 876eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public final Context getContext() { 886eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return context; 896eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 906eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 916eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public Resources getResources() { 926eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return context.getResources(); 936eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 946eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 956eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getVisibility() { 966eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return visibility; 976eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 986eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 996eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void setVisibility(int visibility) { 1006eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.visibility = visibility; 1016eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 102eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz 103eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz public void setSelected(boolean selected) { 104eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz this.selected = selected; 105eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz } 106810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore 107acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz public boolean isSelected() { 108acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz return this.selected; 109acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz } 110acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz 111775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard public boolean isEnabled() { 112775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard return this.enabled; 113775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard } 114775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard 115775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard public void setEnabled(boolean enabled) { 116775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard this.enabled = enabled; 117775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard } 118775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard 119810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore public void setOnClickListener(View.OnClickListener onClickListener) { 120810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore this.onClickListener = onClickListener; 121810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 122810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore 123810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore public boolean performClick() { 124810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore if (onClickListener != null) { 125810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore onClickListener.onClick(realView); 126810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore return true; 127810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } else { 128810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore return false; 129810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 130810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 131c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 132c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz public Object getTag() { 133c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz return this.tag; 134c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz } 135c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 136c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz public void setTag(Object tag) { 137c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz this.tag = tag; 138c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz } 1396eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz} 140