ShadowView.java revision 51fe0b279e9f5568683d9ef67921f922a51c05d5
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;
35d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz    public ViewGroup.LayoutParams layoutParams;
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
546eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public View findViewById(int id) {
55e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz        if (id == this.id) {
56e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz            return realView;
57e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz        }
586eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
59e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz        for (View child : children) {
606eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz            View found = child.findViewById(id);
616eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz            if (found != null) {
626eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz                return found;
636eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz            }
646eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        }
656eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return null;
666eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
676eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
680c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol    public View getRootView() {
690c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        FakeView root = this;
700c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        while(root.parent != null) {
710c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol            root = root.parent;
720c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        }
730c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        return root.realView;
740c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol    }
750c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol
766eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public void addView(View child) {
776eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        children.add(child);
78ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore        childProxy(child).parent = this;
79ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore    }
80ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore
81ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore    private FakeView childProxy(View child) {
82ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore        return (FakeView) ProxyDelegatingHandler.getInstance().proxyFor(child);
836eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
846eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
856eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public int getChildCount() {
866eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return children.size();
876eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
886eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
89d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz    public ViewGroup.LayoutParams getLayoutParams() {
90d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz        return layoutParams;
91d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz    }
92d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz
936eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public View getChildAt(int index) {
946eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return children.get(index);
956eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
966eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
97ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore    public void removeAllViews() {
98ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore        for (View child : children) {
99ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore            childProxy(child).parent = null;
100ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore        }
101ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore        children.clear();
102ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore    }
103ea0871e869748032b7ba534d2b213f83b399c4a9Christian Williams & Joe Moore
1046eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public final Context getContext() {
1056eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return context;
1066eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1076eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
1086eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public Resources getResources() {
1096eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return context.getResources();
1106eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1116eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
1126eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public int getVisibility() {
1136eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return visibility;
1146eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1156eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
1166eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public void setVisibility(int visibility) {
1176eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        this.visibility = visibility;
1186eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
119eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz
120eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz    public void setSelected(boolean selected) {
121eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz        this.selected = selected;
122eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz    }
123810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore
124acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz    public boolean isSelected() {
125acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz        return this.selected;
126acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz    }
127acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz
128775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    public boolean isEnabled() {
129775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard        return this.enabled;
130775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    }
131775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard
132775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    public void setEnabled(boolean enabled) {
133775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard        this.enabled = enabled;
134775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    }
135775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard
136810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    public void setOnClickListener(View.OnClickListener onClickListener) {
137810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        this.onClickListener = onClickListener;
138810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    }
139810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore
140810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    public boolean performClick() {
141810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        if (onClickListener != null) {
142810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore            onClickListener.onClick(realView);
143810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore            return true;
144810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        } else {
145810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore            return false;
146810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        }
147810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    }
148c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz
149c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    public Object getTag() {
150c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz        return this.tag;
151c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    }
152c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz
153c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    public void setTag(Object tag) {
154c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz        this.tag = tag;
155c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    }
15618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
15718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public final int getHeight() {
15818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return height;
15918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
16018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
16118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public final int getWidth() {
16218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return width;
16318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
16418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
16518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public void setPadding(int left, int top, int right, int bottom) {
16618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingLeft = left;
16718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingTop = top;
16818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingRight = right;
16918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingBottom = bottom;
17018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
17118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
17218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingTop() {
17318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingTop;
17418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
17518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
17618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingLeft() {
17718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingLeft;
17818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
17918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
18018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingRight() {
18118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingRight;
18218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
18318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
18418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingBottom() {
18518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingBottom;
18618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
18751fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultz
18844ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    public Object getTag(int key) {
18944ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams        return tags.get(key);
19044ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    }
19144ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams
19244ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    public void setTag(int key, Object value) {
19344ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams        tags.put(key, value);
19444ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    }
1956eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz}
196