GlifLayout.java revision 48c121912f865be865e564a4d0a899988a100d37
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;
2339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lamimport android.graphics.drawable.ColorDrawable;
24fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.graphics.drawable.Drawable;
25c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lamimport android.os.Build;
26fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.os.Build.VERSION_CODES;
27e2a8d27c2a43cf0b48b80e5b05f893222c541e04Maurice Lamimport android.support.annotation.LayoutRes;
28fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lamimport android.support.annotation.NonNull;
2939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lamimport android.support.annotation.Nullable;
30fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.util.AttributeSet;
31fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.LayoutInflater;
32fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.View;
33fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.ViewGroup;
3448c121912f865be865e564a4d0a899988a100d37Maurice Lamimport android.view.ViewStub;
35ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lamimport android.widget.ProgressBar;
36fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ScrollView;
37fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.TextView;
38fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
398721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lamimport com.android.setupwizardlib.template.ButtonFooterMixin;
407514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.template.ColoredHeaderMixin;
417514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.template.HeaderMixin;
427514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.template.IconMixin;
437514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.template.ProgressBarMixin;
44c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lamimport com.android.setupwizardlib.view.StatusBarBackgroundLayout;
45c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lam
46fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam/**
47fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Layout for the GLIF theme used in Setup Wizard for N.
48fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
49fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <p>Example usage:
50fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <pre>{@code
51fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * &lt;com.android.setupwizardlib.GlifLayout
52fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     xmlns:android="http://schemas.android.com/apk/res/android"
53fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     xmlns:app="http://schemas.android.com/apk/res-auto"
54fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:layout_width="match_parent"
55fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:layout_height="match_parent"
56fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     android:icon="@drawable/my_icon"
57fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     app:suwHeaderText="@string/my_title">
58fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
59fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *     &lt;!-- Content here -->
60fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
61fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * &lt;/com.android.setupwizardlib.GlifLayout>
62fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * }</pre>
63fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam */
64fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampublic class GlifLayout extends TemplateLayout {
65fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
66fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private static final String TAG = "GlifLayout";
67fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
68ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    private ColorStateList mPrimaryColor;
69ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
7039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    private boolean mBackgroundPatterned = true;
7139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
7239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    /**
7339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * The color of the background. If null, the color will inherit from mPrimaryColor.
7439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     */
7539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    @Nullable
7639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    private ColorStateList mBackgroundBaseColor;
7739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
78fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context) {
79fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        this(context, 0, 0);
80fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
81fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
82fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, int template) {
83fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        this(context, template, 0);
84fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
85fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
86fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, int template, int containerId) {
87fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, template, containerId);
88fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(null, R.attr.suwLayoutTheme);
89fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
90fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
91fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, AttributeSet attrs) {
92fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, attrs);
93fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(attrs, R.attr.suwLayoutTheme);
94fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
95fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
96fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @TargetApi(VERSION_CODES.HONEYCOMB)
97fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public GlifLayout(Context context, AttributeSet attrs, int defStyleAttr) {
98fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super(context, attrs, defStyleAttr);
99fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        init(attrs, defStyleAttr);
100fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
101fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
102fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    // All the constructors delegate to this init method. The 3-argument constructor is not
103fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    // available in LinearLayout before v11, so call super with the exact same arguments.
104fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private void init(AttributeSet attrs, int defStyleAttr) {
1057514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        registerMixin(HeaderMixin.class, new ColoredHeaderMixin(this, attrs, defStyleAttr));
1067514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        registerMixin(IconMixin.class, new IconMixin(this, attrs, defStyleAttr));
1077514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        registerMixin(ProgressBarMixin.class, new ProgressBarMixin(this));
1088721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam        registerMixin(ButtonFooterMixin.class, new ButtonFooterMixin(this));
1097514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam
110a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        TypedArray a = getContext().obtainStyledAttributes(attrs,
111fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                R.styleable.SuwGlifLayout, defStyleAttr, 0);
112fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
113a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        ColorStateList primaryColor =
114a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam                a.getColorStateList(R.styleable.SuwGlifLayout_suwColorPrimary);
115fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam        if (primaryColor != null) {
116fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam            setPrimaryColor(primaryColor);
117a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam        }
118a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam
11939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        ColorStateList backgroundColor =
12039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam                a.getColorStateList(R.styleable.SuwGlifLayout_suwBackgroundBaseColor);
12139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        setBackgroundBaseColor(backgroundColor);
12239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
12339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        boolean backgroundPatterned =
12439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam                a.getBoolean(R.styleable.SuwGlifLayout_suwBackgroundPatterned, true);
12539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        setBackgroundPatterned(backgroundPatterned);
12639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
12748c121912f865be865e564a4d0a899988a100d37Maurice Lam        final int footer = a.getResourceId(R.styleable.SuwGlifLayout_suwFooter, 0);
12848c121912f865be865e564a4d0a899988a100d37Maurice Lam        if (footer != 0) {
12948c121912f865be865e564a4d0a899988a100d37Maurice Lam            inflateFooter(footer);
13048c121912f865be865e564a4d0a899988a100d37Maurice Lam        }
13148c121912f865be865e564a4d0a899988a100d37Maurice Lam
132fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam        a.recycle();
133fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
134fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
135fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @Override
136e2a8d27c2a43cf0b48b80e5b05f893222c541e04Maurice Lam    protected View onInflateTemplate(LayoutInflater inflater, @LayoutRes int template) {
137fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        if (template == 0) {
138fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam            template = R.layout.suw_glif_template;
139fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        }
140e2a8d27c2a43cf0b48b80e5b05f893222c541e04Maurice Lam        return inflateTemplate(inflater, R.style.SuwThemeGlif_Light, template);
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
15148c121912f865be865e564a4d0a899988a100d37Maurice Lam    /**
15248c121912f865be865e564a4d0a899988a100d37Maurice Lam     * Sets the footer of the layout, which is at the bottom of the content area outside the
15348c121912f865be865e564a4d0a899988a100d37Maurice Lam     * scrolling container. The footer can only be inflated once per layout.
15448c121912f865be865e564a4d0a899988a100d37Maurice Lam     *
15548c121912f865be865e564a4d0a899988a100d37Maurice Lam     * @param footer The layout to be inflated as footer.
15648c121912f865be865e564a4d0a899988a100d37Maurice Lam     * @return The root of the inflated footer view.
15748c121912f865be865e564a4d0a899988a100d37Maurice Lam     */
15848c121912f865be865e564a4d0a899988a100d37Maurice Lam    public View inflateFooter(@LayoutRes int footer) {
15948c121912f865be865e564a4d0a899988a100d37Maurice Lam        ViewStub footerStub = (ViewStub) findManagedViewById(R.id.suw_layout_footer);
16048c121912f865be865e564a4d0a899988a100d37Maurice Lam        footerStub.setLayoutResource(footer);
16148c121912f865be865e564a4d0a899988a100d37Maurice Lam        return footerStub.inflate();
16248c121912f865be865e564a4d0a899988a100d37Maurice Lam    }
16348c121912f865be865e564a4d0a899988a100d37Maurice Lam
164fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public ScrollView getScrollView() {
16584979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam        final View view = findManagedViewById(R.id.suw_scroll_view);
166fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        return view instanceof ScrollView ? (ScrollView) view : null;
167fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
168fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
16984979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam    public TextView getHeaderTextView() {
1707514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        return getMixin(HeaderMixin.class).getTextView();
171b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam    }
172b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam
173fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderText(int title) {
1747514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        getMixin(HeaderMixin.class).setText(title);
175fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
176fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
177fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderText(CharSequence title) {
1787514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        getMixin(HeaderMixin.class).setText(title);
179fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
180fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
181fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public CharSequence getHeaderText() {
1827514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        return getMixin(HeaderMixin.class).getText();
183fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
184fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
185fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setHeaderColor(ColorStateList color) {
1867514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        final ColoredHeaderMixin mixin = (ColoredHeaderMixin) getMixin(HeaderMixin.class);
1877514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        mixin.setColor(color);
188fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
189fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
190fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public ColorStateList getHeaderColor() {
1917514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        final ColoredHeaderMixin mixin = (ColoredHeaderMixin) getMixin(HeaderMixin.class);
1927514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        return mixin.getColor();
193fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
194fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
195fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void setIcon(Drawable icon) {
1967514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        getMixin(IconMixin.class).setIcon(icon);
197fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
198fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
199fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public Drawable getIcon() {
2007514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        return getMixin(IconMixin.class).getIcon();
201fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
2020a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam
203fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam    /**
204fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam     * Sets the primary color of this layout, which will be used to determine the color of the
205fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam     * progress bar and the background pattern.
206fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam     */
207fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam    public void setPrimaryColor(@NonNull ColorStateList color) {
208ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        mPrimaryColor = color;
20939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        updateBackground();
2107514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        getMixin(ProgressBarMixin.class).setColor(color);
211ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
212ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
213ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    public ColorStateList getPrimaryColor() {
214ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        return mPrimaryColor;
215ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
216ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
21739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    /**
21839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * Sets the base color of the background view, which is the status bar for phones and the full-
21939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * screen background for tablets. If {@link #isBackgroundPatterned()} is true, the pattern will
22039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * be drawn with this color.
22139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     *
22239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * @param color The color to use as the base color of the background. If {@code null},
22339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     *              {@link #getPrimaryColor()} will be used.
22439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     */
22539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    public void setBackgroundBaseColor(@Nullable ColorStateList color) {
22639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        mBackgroundBaseColor = color;
22739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        updateBackground();
22839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    }
22939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
23039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    /**
23139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * @return The base color of the background. {@code null} indicates the background will be drawn
23239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     *         with {@link #getPrimaryColor()}.
23339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     */
23439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    @Nullable
23539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    public ColorStateList getBackgroundBaseColor() {
23639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        return mBackgroundBaseColor;
23739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    }
23839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
23939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    /**
24039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * Sets whether the background should be {@link GlifPatternDrawable}. If {@code false}, the
24139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * background will be a solid color.
24239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     */
24339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    public void setBackgroundPatterned(boolean patterned) {
24439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        mBackgroundPatterned = patterned;
24539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        updateBackground();
24639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    }
24739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
24839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    /**
24939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     * @return True if this view uses {@link GlifPatternDrawable} as background.
25039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam     */
25139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    public boolean isBackgroundPatterned() {
25239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam        return mBackgroundPatterned;
25339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    }
25439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam
25539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam    private void updateBackground() {
256fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam        final View patternBg = findManagedViewById(R.id.suw_pattern_bg);
257fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam        if (patternBg != null) {
25839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam            int backgroundColor = 0;
25939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam            if (mBackgroundBaseColor != null) {
26039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam                backgroundColor = mBackgroundBaseColor.getDefaultColor();
26139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam            } else if (mPrimaryColor != null) {
26239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam                backgroundColor = mPrimaryColor.getDefaultColor();
26339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam            }
26439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam            Drawable background = mBackgroundPatterned
26539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam                    ? new GlifPatternDrawable(backgroundColor)
26639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam                    : new ColorDrawable(backgroundColor);
267fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam            if (patternBg instanceof StatusBarBackgroundLayout) {
268fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam                ((StatusBarBackgroundLayout) patternBg).setStatusBarBackground(background);
269fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam            } else {
270fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam                patternBg.setBackgroundDrawable(background);
271fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam            }
272fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam        }
273ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
274ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam            setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
275ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        }
276ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
277ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
2780a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    public boolean isProgressBarShown() {
2797514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        return getMixin(ProgressBarMixin.class).isShown();
2800a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    }
2810a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam
2820a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    public void setProgressBarShown(boolean shown) {
2837514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        getMixin(ProgressBarMixin.class).setShown(shown);
2840a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam    }
285ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
286b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam    public ProgressBar peekProgressBar() {
2877514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam        return getMixin(ProgressBarMixin.class).peekProgressBar();
288ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
289fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam}
290