ShadowView.java revision 415f3fdab8162ece7185268f71b577f7faa0ba38
1a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzpackage com.xtremelabs.robolectric.fakes;
26eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
36eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.content.Context;
46eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.content.res.Resources;
5684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williamsimport android.util.AttributeSet;
6924f851cb0ec279b6974744ce623f25bdc657551Ryan Richardimport android.view.MotionEvent;
76eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzimport android.view.View;
8d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultzimport android.view.ViewGroup;
95411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williamsimport android.view.ViewParent;
10a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzimport com.xtremelabs.robolectric.util.Implementation;
11a2043a8fff01f3e2d9a5e30dd1cf5fb6a5342f4dTyler Schultzimport com.xtremelabs.robolectric.util.Implements;
126eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
1351fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultzimport java.util.HashMap;
1451fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultzimport java.util.Map;
15c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz
16198b49fe81283e340891361045a8bdeb01f35e04Tyler Schultz@SuppressWarnings({"UnusedDeclaration"})
170b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@Implements(View.class)
186eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulzpublic class FakeView {
19a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz    @Deprecated
20f33e228a6f3eed1c97488df2ca30da315324aa1eHarry Ugol    public static final int UNINITIALIZED_ATTRIBUTE = -1000;
21f33e228a6f3eed1c97488df2ca30da315324aa1eHarry Ugol
225411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    protected View realView;
236eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
246eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    private int id;
2563bd7c4e869525014879db3428e17eb4d2728cf9Christian Williams    FakeView parent;
266eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    private Context context;
27eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz    public boolean selected;
28810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    private View.OnClickListener onClickListener;
29c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    private Object tag;
30775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    private boolean enabled = true;
31a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz    public int visibility = View.VISIBLE;
32a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard    public int left;
33a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard    public int top;
34a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard    public int right;
35a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard    public int bottom;
3618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int paddingLeft;
3718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int paddingTop;
3818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int paddingRight;
3918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int paddingBottom;
40686237bc49c2d8ff1891cb5fadaa7aaaf1cf9bddChristian Williams & Tyler Schultz    public ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(0, 0);
4144ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    private Map<Integer, Object> tags = new HashMap<Integer, Object>();
42cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz    public boolean clickable;
43254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin    protected boolean focusable;
444d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin    public int backgroundResourceId = -1;
455411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    protected View.OnKeyListener onKeyListener;
465411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    public boolean hasFocus;
475411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    private View.OnFocusChangeListener onFocusChangeListener;
481c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard    public boolean wasInvalidated;
49924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard    private View.OnTouchListener onTouchListener;
50415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard    private boolean focusableInTouchMode;
516eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
526eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public FakeView(View view) {
536eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        this.realView = view;
546eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
556eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
566eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public void __constructor__(Context context) {
576eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        this.context = context;
586eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
596eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
60684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williams    public void __constructor__(Context context, AttributeSet attrs) {
61684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williams        __constructor__(context);
62684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williams    }
63684ccc2fc5a1c79aa45af22b95c37f7c509a00c1Christian Williams
64de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
656eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public void setId(int id) {
666eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        this.id = id;
676eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
686eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
69de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
70cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz    public void setClickable(boolean clickable) {
71cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz        this.clickable = clickable;
72cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz    }
73cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz
74de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
75cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz    public void setFocusable(boolean focusable) {
76cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz        this.focusable = focusable;
77415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard        if(!focusable) {
78415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard            setFocusableInTouchMode(false);
79415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard        }
80415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard    }
81415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard
82415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard    @Implementation
83415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard    public final boolean isFocusableInTouchMode() {
84415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard        return focusableInTouchMode;
85415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard    }
86415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard
87415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard    @Implementation
88415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard    public void setFocusableInTouchMode(boolean focusableInTouchMode) {
89415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard        this.focusableInTouchMode = focusableInTouchMode;
90415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard        if(focusableInTouchMode) {
91415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard            setFocusable(true);
92415f3fdab8162ece7185268f71b577f7faa0ba38Phil Goodwin & Ryan Richard        }
93cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz    }
94cc4bd26d94f6eba2a0dc3dae0065c8df2296a95eIan Fisher & Tyler Schultz
95de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
96254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin    public boolean isFocusable() {
97254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin        return focusable;
98254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin    }
99254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin
100254044cea0df7e6aef3ce33c98a5003a6eba0512Christian Williams & Phil Goodwin    @Implementation
1016eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public int getId() {
1026eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return id;
1036eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1046eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
105de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
106a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz    public static View inflate(Context context, int resource, ViewGroup root) {
107a7e263ae4add03982ef3fe294d72ae43102ce52eChristian Williams        View view = FakeLayoutInflater.from(context).inflate(resource, root);
108a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz        if (root != null) {
109a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz            root.addView(view);
110a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz        }
111a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz        return view;
112a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz    }
113a66c979cb64d406c1646a0909bd9a0b6b6ccd802Ian Fisher & Tyler Schultz
114de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1156eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public View findViewById(int id) {
116e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz        if (id == this.id) {
117e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz            return realView;
118e617325bfe357b73644421064cae37e0a033eed7Christian Williams & Tyler Schulz        }
1196eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
1206eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return null;
1216eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1226eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
123de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1240c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol    public View getRootView() {
1250c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        FakeView root = this;
1260c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        while(root.parent != null) {
1270c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol            root = root.parent;
1280c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        }
1290c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol        return root.realView;
1300c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol    }
1310c40acb66824054e469b3afbc3609ba39bbdac1cChristian Williams & Harry Ugol
132de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
133d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz    public ViewGroup.LayoutParams getLayoutParams() {
134d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz        return layoutParams;
135d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz    }
136d4f5daf12f1d112cf06b8b8914437ed6c0b3a677Ryan Richard & Tyler Schultz
137de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
138b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard    public void setLayoutParams(ViewGroup.LayoutParams params) {
139b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard        layoutParams = params;
140b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard    }
141b0336c5991d124b6b157b9dc976ade56d00cba3eChristian Williams & Ryan Richard
142de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1435411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    public final ViewParent getParent() {
144a89236397e869467b3fc6f7208f551da61235795Christian Williams & Tyler Schultz        return parent == null ? null : (ViewParent) parent.realView;
1455411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    }
1465411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams
147de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1486eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public final Context getContext() {
1496eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return context;
1506eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1516eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
152de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1536eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public Resources getResources() {
1546eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return context.getResources();
1556eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1566eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
157de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1584d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin    public void setBackgroundResource(int backgroundResourceId) {
1594d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin        this.backgroundResourceId = backgroundResourceId;
1604d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin    }
1614d4b979c716f731be80852e7c04fdbe9862be3f0Ian Fisher & Phil Goodwin
162de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1636eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public int getVisibility() {
1646eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        return visibility;
1656eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
1666eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz
167de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
1686eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    public void setVisibility(int visibility) {
1696eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz        this.visibility = visibility;
1706eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz    }
171eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz
172de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
173eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz    public void setSelected(boolean selected) {
174eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz        this.selected = selected;
175eaadc83b187e31670dec8837d0851c0646522987Joe Moore & Tyler Schultz    }
176810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore
177de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
178acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz    public boolean isSelected() {
179acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz        return this.selected;
180acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz    }
181acb084f15b3b6e2496136ee8449b5d64ccb54939Ryan Richard & Tyler Schultz
182de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
183775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    public boolean isEnabled() {
184775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard        return this.enabled;
185775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    }
186775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard
187de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
188775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    public void setEnabled(boolean enabled) {
189775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard        this.enabled = enabled;
190775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard    }
191775ccf7ae53d9b4c77d3adf2514f26747cebd89cIan Fisher & Ryan Richard
192de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
193810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    public void setOnClickListener(View.OnClickListener onClickListener) {
194810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        this.onClickListener = onClickListener;
195810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    }
196810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore
197de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
198810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    public boolean performClick() {
199810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        if (onClickListener != null) {
200810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore            onClickListener.onClick(realView);
201810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore            return true;
202810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        } else {
203810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore            return false;
204810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore        }
205810ca4e6f0dc6d69504b3e03ef61155f10083fbeChristian Williams & Joe Moore    }
206c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz
207de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
2085411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    public void setOnKeyListener(View.OnKeyListener onKeyListener) {
2095411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams        this.onKeyListener = onKeyListener;
2105411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    }
2115411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams
212de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
213c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    public Object getTag() {
214c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz        return this.tag;
215c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    }
216c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz
217de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
218c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    public void setTag(Object tag) {
219c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz        this.tag = tag;
220c6f46aeb970c9111e2e79b806451f63b4853950bIan Fisher & Tyler Schultz    }
22118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
222de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
22318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public final int getHeight() {
224a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard        return bottom - top;
22518141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
22618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
227de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
22818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public final int getWidth() {
229a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard        return right - left;
23018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
23118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
232de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
233924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard    public final int getMeasuredWidth() {
234a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard        return getWidth();
235a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard    }
236a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard
237de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
238a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard    public final void layout(int l, int t, int r, int b) {
239a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard        left = l;
240a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard        top = t;
241a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard        right = r;
242a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard        bottom = b;
243a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard
244a1ef7deaed03310ed6ec51621125f69bb16ac8fcChristian Williams & Ryan Richard// todo:       realView.onLayout();
245924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard    }
246924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard
247de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
24818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public void setPadding(int left, int top, int right, int bottom) {
24918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingLeft = left;
25018141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingTop = top;
25118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingRight = right;
25218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        paddingBottom = bottom;
25318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
25418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
255de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
25618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingTop() {
25718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingTop;
25818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
25918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
260de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
26118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingLeft() {
26218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingLeft;
26318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
26418141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
265de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
26618141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingRight() {
26718141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingRight;
26818141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
26918141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard
270de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
27118141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    public int getPaddingBottom() {
27218141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard        return paddingBottom;
27318141e608f2e60c866a9b7729909e9ce3b9eb588Ian Fisher & Ryan Richard    }
27451fe0b279e9f5568683d9ef67921f922a51c05d5Christian Williams & Tyler Schultz
275de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
27644ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    public Object getTag(int key) {
27744ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams        return tags.get(key);
27844ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    }
27944ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams
280de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
28144ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    public void setTag(int key, Object value) {
28244ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams        tags.put(key, value);
28344ade170c5bc611222ed25d5b1f8e7745104057dChristian Williams    }
2845411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams
28565e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    @Implementation
28665e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    public final boolean requestFocus() {
28765e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams        return requestFocus(View.FOCUS_DOWN);
28865e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    }
28965e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams
29065e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    @Implementation
29165e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    public final boolean requestFocus(int direction) {
29265e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams        setViewFocus(true);
29365e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams        return true;
29465e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    }
29565e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams
2965411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    public void setViewFocus(boolean hasFocus) {
2975411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams        this.hasFocus = hasFocus;
2985411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams        if (onFocusChangeListener != null) {
2995411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams            onFocusChangeListener.onFocusChange(realView, hasFocus);
3005411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams        }
3015411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    }
3025411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams
303de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
30465e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    public boolean isFocused() {
30565e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams        return hasFocus;
30665e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    }
30765e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams
30865e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    @Implementation
3095411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    public boolean hasFocus() {
3105411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams        return hasFocus;
3115411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    }
3125411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams
313de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
31465e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    public void clearFocus() {
31565e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams        setViewFocus(false);
31665e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    }
31765e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams
31865e90b1b9829e83cac5cdcf8836b9706aa67c072Christian Williams    @Implementation
3195411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    public void setOnFocusChangeListener(View.OnFocusChangeListener listener) {
3205411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams        onFocusChangeListener = listener;
3215411bf7cde998b5c2e70b69fe3d7227b6783ab7cChristian Williams    }
3221c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard
323de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
3241c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard    public void invalidate() {
3251c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard        wasInvalidated = true;
3261c46c94a5affe7beeb8c6bfcb5ec0ed509e5fdbdRyan Richard    }
327924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard
328de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
329924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard    public void setOnTouchListener(View.OnTouchListener onTouchListener) {
330924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard        this.onTouchListener = onTouchListener;
331924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard    }
332924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard
333de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
334924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard    public boolean dispatchTouchEvent(MotionEvent event) {
335924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard        if (onTouchListener != null) {
336924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard            return onTouchListener.onTouch(realView, event);
337924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard        }
338924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard        return false;
339924f851cb0ec279b6974744ce623f25bdc657551Ryan Richard    }
3402ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin
3412ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin    public String innerText() {
3422ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin        return "";
3432ff94a9e4df5b0d3eb21bda70793b27d9f1f353cChristian Williams & Phil Goodwin    }
3446eedf728138e6f79fa898ff3e31bf61c9b1151dChristian Williams & Tyler Schulz}
345