ShadowView.java revision a66c979cb64d406c1646a0909bd9a0b6b6ccd802
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; 6d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultzimport android.view.ViewGroup; 70c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugolimport com.xtremelabs.droidsugar.ProxyDelegatingHandler; 86eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 9c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultzimport java.util.ArrayList; 1051fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultzimport java.util.HashMap; 11c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultzimport java.util.List; 1251fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultzimport java.util.Map; 13c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 14198b49fe81283e340891361045a8bdeb01f35e04Tyler Schultz@SuppressWarnings({"UnusedDeclaration"}) 156eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzpublic class FakeView { 16f33e228a6f3eed1c97488df2ca30da315324aa1eHarry Ugol public static final int UNINITIALIZED_ATTRIBUTE = -1000; 17f33e228a6f3eed1c97488df2ca30da315324aa1eHarry Ugol 186eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private View realView; 196eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 206eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private int id; 216eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private List<View> children = new ArrayList<View>(); 220c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol private FakeView parent; 236eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz private Context context; 24eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz public boolean selected; 25810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore private View.OnClickListener onClickListener; 26c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz private Object tag; 27775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard private boolean enabled = true; 28f33e228a6f3eed1c97488df2ca30da315324aa1eHarry Ugol public int visibility = UNINITIALIZED_ATTRIBUTE; 2918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int height; 3018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int width; 3118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int paddingLeft; 3218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int paddingTop; 3318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int paddingRight; 3418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int paddingBottom; 35686237bc49c2d8ff1891cb5fadaa7aaaf1cf9bddChristian Williams & Tyler Schultz public ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(0, 0); 3644ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams private Map<Integer, Object> tags = new HashMap<Integer, Object>(); 376eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 386eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public FakeView(View view) { 396eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.realView = view; 406eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 416eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 426eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void __constructor__(Context context) { 436eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.context = context; 446eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 456eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 466eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void setId(int id) { 476eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.id = id; 486eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 496eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 506eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getId() { 516eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return id; 526eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 536eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 54a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz public static View inflate(Context context, int resource, ViewGroup root) { 55a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz View view = FakeContextWrapper.viewLoader.inflateView(context, resource); 56a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz if (root != null) { 57a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz root.addView(view); 58a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz } 59a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz return view; 60a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz } 61a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz 626eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public View findViewById(int id) { 63e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz if (id == this.id) { 64e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz return realView; 65e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz } 666eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 67e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz for (View child : children) { 686eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz View found = child.findViewById(id); 696eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz if (found != null) { 706eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return found; 716eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 726eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 736eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return null; 746eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 756eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 760c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol public View getRootView() { 770c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol FakeView root = this; 780c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol while(root.parent != null) { 790c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol root = root.parent; 800c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol } 810c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol return root.realView; 820c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol } 830c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol 846eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void addView(View child) { 856eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz children.add(child); 86ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore childProxy(child).parent = this; 87ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore } 88ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore 89ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore private FakeView childProxy(View child) { 90ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore return (FakeView) ProxyDelegatingHandler.getInstance().proxyFor(child); 916eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 926eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 936eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getChildCount() { 946eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return children.size(); 956eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 966eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 97d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz public ViewGroup.LayoutParams getLayoutParams() { 98d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz return layoutParams; 99d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz } 100d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz 1016eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public View getChildAt(int index) { 1026eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return children.get(index); 1036eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 1046eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 105ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore public void removeAllViews() { 106ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore for (View child : children) { 107ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore childProxy(child).parent = null; 108ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore } 109ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore children.clear(); 110ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore } 111ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore 1126eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public final Context getContext() { 1136eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return context; 1146eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 1156eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 1166eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public Resources getResources() { 1176eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return context.getResources(); 1186eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 1196eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 1206eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public int getVisibility() { 1216eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz return visibility; 1226eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 1236eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz 1246eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz public void setVisibility(int visibility) { 1256eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz this.visibility = visibility; 1266eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz } 127eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz 128eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz public void setSelected(boolean selected) { 129eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz this.selected = selected; 130eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz } 131810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore 132acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz public boolean isSelected() { 133acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz return this.selected; 134acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz } 135acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz 136775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard public boolean isEnabled() { 137775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard return this.enabled; 138775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard } 139775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard 140775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard public void setEnabled(boolean enabled) { 141775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard this.enabled = enabled; 142775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard } 143775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard 144810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore public void setOnClickListener(View.OnClickListener onClickListener) { 145810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore this.onClickListener = onClickListener; 146810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 147810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore 148810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore public boolean performClick() { 149810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore if (onClickListener != null) { 150810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore onClickListener.onClick(realView); 151810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore return true; 152810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } else { 153810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore return false; 154810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 155810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore } 156c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 157c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz public Object getTag() { 158c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz return this.tag; 159c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz } 160c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz 161c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz public void setTag(Object tag) { 162c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz this.tag = tag; 163c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz } 16418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 16518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public final int getHeight() { 16618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return height; 16718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 16818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 16918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public final int getWidth() { 17018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return width; 17118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 17218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 17318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public void setPadding(int left, int top, int right, int bottom) { 17418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingLeft = left; 17518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingTop = top; 17618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingRight = right; 17718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard paddingBottom = bottom; 17818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 17918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 18018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingTop() { 18118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingTop; 18218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 18318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 18418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingLeft() { 18518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingLeft; 18618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 18718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 18818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingRight() { 18918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingRight; 19018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 19118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard 19218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard public int getPaddingBottom() { 19318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard return paddingBottom; 19418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard } 19551fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultz 19644ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams public Object getTag(int key) { 19744ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams return tags.get(key); 19844ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams } 19944ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams 20044ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams public void setTag(int key, Object value) { 20144ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams tags.put(key, value); 20244ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams } 2036eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz} 204