1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/*
2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2008 The Android Open Source Project
3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License.
6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at
7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski *
10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software
11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and
14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License.
15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage com.android.layoutlib.bridge;
18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.Context;
20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.util.AttributeSet;
21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.Gravity;
22d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Guptaimport android.view.View;
23d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Guptaimport android.view.ViewGroup;
24d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Guptaimport android.widget.FrameLayout;
25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.TextView;
26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/**
28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Base class for mocked views.
29d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta * <p/>
30d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta * FrameLayout with a single TextView. Doesn't allow adding any other views to itself.
31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */
32d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Guptapublic class MockView extends FrameLayout {
33d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
34d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    private final TextView mView;
35d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
36d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public MockView(Context context) {
37d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        this(context, null);
38d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    }
39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
409bf4b6f8c0a0d28402894b7a9660e8aced47545bDeepanshu Gupta    public MockView(Context context, AttributeSet attrs) {
419bf4b6f8c0a0d28402894b7a9660e8aced47545bDeepanshu Gupta        this(context, attrs, 0);
429bf4b6f8c0a0d28402894b7a9660e8aced47545bDeepanshu Gupta    }
439bf4b6f8c0a0d28402894b7a9660e8aced47545bDeepanshu Gupta
44d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public MockView(Context context, AttributeSet attrs, int defStyleAttr) {
45d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        this(context, attrs, defStyleAttr, 0);
46367a0ce902edbdbea7d63aedd9c98820c00909aeDeepanshu Gupta    }
47367a0ce902edbdbea7d63aedd9c98820c00909aeDeepanshu Gupta
48367a0ce902edbdbea7d63aedd9c98820c00909aeDeepanshu Gupta    public MockView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
49367a0ce902edbdbea7d63aedd9c98820c00909aeDeepanshu Gupta        super(context, attrs, defStyleAttr, defStyleRes);
50d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        mView = new TextView(context, attrs);
51d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        mView.setTextColor(0xFF000000);
52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski        setGravity(Gravity.CENTER);
53d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        setText(getClass().getSimpleName());
54d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        addView(mView);
55d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        setBackgroundColor(0xFF7F7F7F);
56d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    }
57d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
58d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    // Only allow adding one TextView.
59d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    @Override
60d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public void addView(View child) {
61d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        if (child == mView) {
62d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta            super.addView(child);
63d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        }
64d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    }
65d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
66d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    @Override
67d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public void addView(View child, int index) {
68d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        if (child == mView) {
69d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta            super.addView(child, index);
70d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        }
71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    @Override
74d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public void addView(View child, int width, int height) {
75d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        if (child == mView) {
76d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta            super.addView(child, width, height);
77d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        }
78d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    }
79d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
80d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    @Override
81d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public void addView(View child, ViewGroup.LayoutParams params) {
82d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        if (child == mView) {
83d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta            super.addView(child, params);
84d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        }
85d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    }
86d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
87d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    @Override
88d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public void addView(View child, int index, ViewGroup.LayoutParams params) {
89d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        if (child == mView) {
90d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta            super.addView(child, index, params);
91d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        }
92d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    }
93d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
94d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    // The following methods are called by the IDE via reflection, and should be considered part
95d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    // of the API.
96d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    // Historically, MockView used to be a textView and had these methods. Now, we simply delegate
97d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    // them to the contained textView.
98d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta
99d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public void setText(CharSequence text) {
100d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        mView.setText(text);
101d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    }
102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski
103d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta    public void setGravity(int gravity) {
104d30c141a2dee881fd83e1415a50161def1acf227Deepanshu Gupta        mView.setGravity(gravity);
105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski    }
106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}
107