GlifLayout.java revision b01f3ef075d501d1f61e6f61794a5cadd3ff2026
1fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam/*
2fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Copyright (C) 2015 The Android Open Source Project
3fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
4fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Licensed under the Apache License, Version 2.0 (the "License");
5fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * you may not use this file except in compliance with the License.
6fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * You may obtain a copy of the License at
7fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
8fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *      http://www.apache.org/licenses/LICENSE-2.0
9fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
10fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Unless required by applicable law or agreed to in writing, software
11fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * distributed under the License is distributed on an "AS IS" BASIS,
12fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * See the License for the specific language governing permissions and
14fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * limitations under the License.
15fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam */
16fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
17fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampackage com.android.setupwizardlib;
18fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
19fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.annotation.TargetApi;
20fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.content.Context;
21fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.content.res.ColorStateList;
22fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.content.res.TypedArray;
23fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.graphics.drawable.Drawable;
24fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.os.Build.VERSION_CODES;
25fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.util.AttributeSet;
26fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.LayoutInflater;
27fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.View;
28fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.ViewGroup;
29fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ImageView;
30fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ScrollView;
31fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.TextView;
32fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
33fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam/**
34fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Layout for the GLIF theme used in Setup Wizard for N.
35fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
36fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <p>Example usage:
37fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <pre>{@code
38fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * &lt;com.android.setupwizardlib.GlifLayout
39fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     xmlns:android="http://schemas.android.com/apk/res/android"
40fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     xmlns:app="http://schemas.android.com/apk/res-auto"
41fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:layout_width="match_parent"
42fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:layout_height="match_parent"
43fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:icon="@drawable/my_icon"
44fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     app:suwHeaderText="@string/my_title">
45fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
46fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     &lt;!-- Content here -->
47fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
48fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * &lt;/com.android.setupwizardlib.GlifLayout>
49fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * }</pre>
50fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam */
51fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampublic class GlifLayout extends TemplateLayout {
52fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
53fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private static final String TAG = "GlifLayout";
54fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
55fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context) {
56fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        this(context, 0, 0);
57fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
58fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
59fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, int template) {
60fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        this(context, template, 0);
61fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
62fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
63fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, int template, int containerId) {
64fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, template, containerId);
65fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(null, R.attr.suwLayoutTheme);
66fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
67fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
68fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, AttributeSet attrs) {
69fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, attrs);
70fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(attrs, R.attr.suwLayoutTheme);
71fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
72fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
73fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @TargetApi(VERSION_CODES.HONEYCOMB)
74fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, AttributeSet attrs, int defStyleAttr) {
75fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, attrs, defStyleAttr);
76fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(attrs, defStyleAttr);
77fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
78fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
79fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    // All the constructors delegate to this init method. The 3-argument constructor is not
80fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    // available in LinearLayout before v11, so call super with the exact same arguments.
81fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private void init(AttributeSet attrs, int defStyleAttr) {
82fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final TypedArray a = getContext().obtainStyledAttributes(attrs,
83fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                R.styleable.SuwGlifLayout, defStyleAttr, 0);
84fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
85fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final Drawable icon = a.getDrawable(R.styleable.SuwGlifLayout_android_icon);
86fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (icon != null) {
87fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            setIcon(icon);
88fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
89fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
90fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        // Set the header color
91fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final ColorStateList headerColor =
92fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                a.getColorStateList(R.styleable.SuwGlifLayout_suwHeaderColor);
93fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (headerColor != null) {
94fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            setHeaderColor(headerColor);
95fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
96fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
97fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
98fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        // Set the header text
99fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final CharSequence headerText =
100fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                a.getText(R.styleable.SuwGlifLayout_suwHeaderText);
101fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (headerText != null) {
102fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            setHeaderText(headerText);
103fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
104fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
105fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        a.recycle();
106fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
107fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
108fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @Override
109fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    protected View onInflateTemplate(LayoutInflater inflater, int template) {
110fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (template == 0) {
111fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            template = R.layout.suw_glif_template;
112fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
113fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return super.onInflateTemplate(inflater, template);
114fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
115fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
116fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @Override
117fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    protected ViewGroup findContainer(int containerId) {
118fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (containerId == 0) {
119fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            containerId = R.id.suw_layout_content;
120fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
121fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return super.findContainer(containerId);
122fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
123fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
124fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public ScrollView getScrollView() {
125fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final View view = findViewById(R.id.suw_scroll_view);
126fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return view instanceof ScrollView ? (ScrollView) view : null;
127fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
128fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
129b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam    protected TextView getHeaderTextView() {
130b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        return (TextView) findViewById(R.id.suw_layout_title);
131b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam    }
132b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam
133fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderText(int title) {
134b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        setHeaderText(getContext().getResources().getText(title));
135fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
136fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
137fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderText(CharSequence title) {
138b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
139fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (titleView != null) {
140fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            titleView.setText(title);
141fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
142fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
143fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
144fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public CharSequence getHeaderText() {
145b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
146fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return titleView != null ? titleView.getText() : null;
147fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
148fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
149fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderColor(ColorStateList color) {
150b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
151fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (titleView != null) {
152fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            titleView.setTextColor(color);
153fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
154fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
155fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
156fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public ColorStateList getHeaderColor() {
157b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
158fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return titleView != null ? titleView.getTextColors() : null;
159fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
160fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
161fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setIcon(Drawable icon) {
162fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final ImageView iconView = getIconView();
163fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (iconView != null) {
164fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            iconView.setImageDrawable(icon);
165fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
166fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
167fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
168fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public Drawable getIcon() {
169fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final ImageView iconView = getIconView();
170fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return iconView != null ? iconView.getDrawable() : null;
171fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
172fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
173b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam    protected ImageView getIconView() {
174fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return (ImageView) findViewById(R.id.suw_layout_icon);
175fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
176fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam}
177