GlifLayout.java revision a6d30093e9308a88fc875b484cf16cda385c2f98
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;
24c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lamimport android.os.Build;
25fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.os.Build.VERSION_CODES;
26fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.util.AttributeSet;
2799586481628659cd2982a0248bc0d09a6ec4590eMaurice Lamimport android.view.InflateException;
28fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.LayoutInflater;
29fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.View;
30fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.ViewGroup;
310a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lamimport android.view.ViewStub;
32fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ImageView;
33ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lamimport android.widget.ProgressBar;
34fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ScrollView;
35fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.TextView;
36fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
37c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lamimport com.android.setupwizardlib.view.StatusBarBackgroundLayout;
38c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lam
39fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam/**
40fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Layout for the GLIF theme used in Setup Wizard for N.
41fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
42fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <p>Example usage:
43fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <pre>{@code
44fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * &lt;com.android.setupwizardlib.GlifLayout
45fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     xmlns:android="http://schemas.android.com/apk/res/android"
46fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     xmlns:app="http://schemas.android.com/apk/res-auto"
47fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:layout_width="match_parent"
48fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:layout_height="match_parent"
49fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:icon="@drawable/my_icon"
50fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     app:suwHeaderText="@string/my_title">
51fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
52fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     &lt;!-- Content here -->
53fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
54fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * &lt;/com.android.setupwizardlib.GlifLayout>
55fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * }</pre>
56fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam */
57fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampublic class GlifLayout extends TemplateLayout {
58fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
59fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private static final String TAG = "GlifLayout";
60fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
61ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    private ColorStateList mPrimaryColor;
62ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
63fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context) {
64fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        this(context, 0, 0);
65fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
66fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
67fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, int template) {
68fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        this(context, template, 0);
69fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
70fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
71fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, int template, int containerId) {
72fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, template, containerId);
73fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(null, R.attr.suwLayoutTheme);
74fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
75fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
76fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, AttributeSet attrs) {
77fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, attrs);
78fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(attrs, R.attr.suwLayoutTheme);
79fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
80fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
81fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @TargetApi(VERSION_CODES.HONEYCOMB)
82fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, AttributeSet attrs, int defStyleAttr) {
83fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, attrs, defStyleAttr);
84fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(attrs, defStyleAttr);
85fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
86fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
87fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    // All the constructors delegate to this init method. The 3-argument constructor is not
88fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    // available in LinearLayout before v11, so call super with the exact same arguments.
89fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private void init(AttributeSet attrs, int defStyleAttr) {
90a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        TypedArray a = getContext().obtainStyledAttributes(attrs,
91fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                R.styleable.SuwGlifLayout, defStyleAttr, 0);
92fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
93fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final Drawable icon = a.getDrawable(R.styleable.SuwGlifLayout_android_icon);
94fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (icon != null) {
95fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            setIcon(icon);
96fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
97fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
98fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        // Set the header color
99fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final ColorStateList headerColor =
100fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                a.getColorStateList(R.styleable.SuwGlifLayout_suwHeaderColor);
101fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (headerColor != null) {
102fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            setHeaderColor(headerColor);
103fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
104fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
105fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
106fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        // Set the header text
107fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final CharSequence headerText =
108fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                a.getText(R.styleable.SuwGlifLayout_suwHeaderText);
109fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (headerText != null) {
110fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            setHeaderText(headerText);
111fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
112fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
113a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        ColorStateList primaryColor =
114a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam                a.getColorStateList(R.styleable.SuwGlifLayout_suwColorPrimary);
115c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lam
116ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        a.recycle();
117a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam
118a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        if (primaryColor == null && Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
119a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam            a = getContext().obtainStyledAttributes(attrs,
120a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam                    R.styleable.SuwGlifLayoutV21, defStyleAttr, 0);
121a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam            primaryColor = a.getColorStateList(R.styleable.SuwGlifLayoutV21_android_colorPrimary);
122a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam            a.recycle();
123a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        }
124a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam
125a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        setPrimaryColor(primaryColor);
126fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
127fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
128fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @Override
129fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    protected View onInflateTemplate(LayoutInflater inflater, int template) {
130fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (template == 0) {
131fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            template = R.layout.suw_glif_template;
132fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
13399586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam        try {
13499586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam            return super.onInflateTemplate(inflater, template);
1353aee7b9de403e669e24ce68da1b390ab74288364Maurice Lam        } catch (RuntimeException e) {
1363aee7b9de403e669e24ce68da1b390ab74288364Maurice Lam            // Versions before M throws RuntimeException for unsuccessful attribute resolution
1373aee7b9de403e669e24ce68da1b390ab74288364Maurice Lam            // Versions M+ will throw an InflateException (which extends from RuntimeException)
13899586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam            throw new InflateException("Unable to inflate layout. Are you using "
13999586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam                    + "@style/SuwThemeGlif (or its descendant) as your theme?", e);
14099586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam        }
141fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
142fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
143fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @Override
144fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    protected ViewGroup findContainer(int containerId) {
145fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (containerId == 0) {
146fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            containerId = R.id.suw_layout_content;
147fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
148fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return super.findContainer(containerId);
149fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
150fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
15184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    /**
15284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam     * Same as {@link android.view.View#findViewById(int)}, but may include views that are managed
15384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam     * by this view but not currently added to the view hierarchy. e.g. recycler view or list view
15484979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam     * headers that are not currently shown.
15584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam     */
15684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    protected View findManagedViewById(int id) {
15784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        return findViewById(id);
15884979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    }
15984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam
160fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public ScrollView getScrollView() {
16184979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        final View view = findManagedViewById(R.id.suw_scroll_view);
162fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return view instanceof ScrollView ? (ScrollView) view : null;
163fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
164fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
16584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    public TextView getHeaderTextView() {
16684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        return (TextView) findManagedViewById(R.id.suw_layout_title);
167b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam    }
168b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam
169fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderText(int title) {
170b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        setHeaderText(getContext().getResources().getText(title));
171fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
172fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
173fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderText(CharSequence title) {
174b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
175fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (titleView != null) {
176fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            titleView.setText(title);
177fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
178fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
179fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
180fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public CharSequence getHeaderText() {
181b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
182fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return titleView != null ? titleView.getText() : null;
183fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
184fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
185fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderColor(ColorStateList color) {
186b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
187fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (titleView != null) {
188fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            titleView.setTextColor(color);
189fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
190fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
191fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
192fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public ColorStateList getHeaderColor() {
193b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam        final TextView titleView = getHeaderTextView();
194fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return titleView != null ? titleView.getTextColors() : null;
195fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
196fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
197fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setIcon(Drawable icon) {
198fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final ImageView iconView = getIconView();
199fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (iconView != null) {
200fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            iconView.setImageDrawable(icon);
201fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
202fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
203fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
204fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public Drawable getIcon() {
205fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        final ImageView iconView = getIconView();
206fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return iconView != null ? iconView.getDrawable() : null;
207fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
208fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
209b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam    protected ImageView getIconView() {
21084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        return (ImageView) findManagedViewById(R.id.suw_layout_icon);
211fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
2120a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam
213ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    public void setPrimaryColor(ColorStateList color) {
214ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        mPrimaryColor = color;
215ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        setGlifPatternColor(color);
216ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        setProgressBarColor(color);
217ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
218ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
219ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    public ColorStateList getPrimaryColor() {
220ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        return mPrimaryColor;
221ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
222ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
223ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    private void setGlifPatternColor(ColorStateList color) {
224ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
225ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam            setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
22684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam            final View patternBg = findManagedViewById(R.id.suw_pattern_bg);
227ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam            if (patternBg != null) {
228ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                final GlifPatternDrawable background =
229ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                        new GlifPatternDrawable(color.getDefaultColor());
230ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                if (patternBg instanceof StatusBarBackgroundLayout) {
231ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                    ((StatusBarBackgroundLayout) patternBg).setStatusBarBackground(background);
232ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                } else {
233ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                    patternBg.setBackground(background);
234ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                }
235ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam            }
236ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        }
237ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
238ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
2390a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    public boolean isProgressBarShown() {
24084979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        final View progressBar = findManagedViewById(R.id.suw_layout_progress);
2410a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam        return progressBar != null && progressBar.getVisibility() == View.VISIBLE;
2420a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    }
2430a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam
2440a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    public void setProgressBarShown(boolean shown) {
2450a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam        if (shown) {
246b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam            View progressBar = getProgressBar();
247d66273847cb8cb69513db37e26e6ab0ee0590cc3Maurice Lam            if (progressBar != null) {
248d66273847cb8cb69513db37e26e6ab0ee0590cc3Maurice Lam                progressBar.setVisibility(View.VISIBLE);
249d66273847cb8cb69513db37e26e6ab0ee0590cc3Maurice Lam            }
2500a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam        } else {
251b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam            View progressBar = peekProgressBar();
2520a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam            if (progressBar != null) {
2530a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam                progressBar.setVisibility(View.GONE);
2540a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam            }
2550a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam        }
2560a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    }
257ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
258b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam    /**
259b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     * Gets the progress bar in the layout. If the progress bar has not been used before, it will be
260b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     * installed (i.e. inflated from its view stub).
261b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     *
262b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     * @return The progress bar of this layout. May be null only if the template used doesn't have a
263b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     *         progress bar built-in.
264b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     */
265b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam    private ProgressBar getProgressBar() {
266b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam        final View progressBar = peekProgressBar();
267b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam        if (progressBar == null) {
268b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam            final ViewStub progressBarStub =
269b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam                    (ViewStub) findManagedViewById(R.id.suw_layout_progress_stub);
270b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam            if (progressBarStub != null) {
271b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam                progressBarStub.inflate();
272b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam            }
273b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam            setProgressBarColor(mPrimaryColor);
274b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam        }
275b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam        return peekProgressBar();
276b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam    }
277b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam
278b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam    /**
279b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     * Gets the progress bar in the layout only if it has been installed.
280b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     * {@link #setProgressBarShown(boolean)} should be called before this to ensure the progress bar
281b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     * is set up correctly.
282b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     *
283b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     * @return The progress bar of this layout, or null if the progress bar is not installed. The
284b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     *         null case can happen either if {@link #setProgressBarShown(boolean)} with true was
285b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     *         not called before this, or if the template does not contain a progress bar.
286b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam     */
287b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam    public ProgressBar peekProgressBar() {
288b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam        return (ProgressBar) findManagedViewById(R.id.suw_layout_progress);
289b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam    }
290b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam
291ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    private void setProgressBarColor(ColorStateList color) {
292ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
293b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam            final ProgressBar bar = peekProgressBar();
294ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam            if (bar != null) {
295ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                bar.setIndeterminateTintList(color);
296bc89919a0287256bf8255e8013c1c7c2ccf49f58Ajay Nadathur                bar.setProgressBackgroundTintList(color);
297ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam            }
298ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        }
299ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
300fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam}
301