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