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 * <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 * <!-- Content here --> 60fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * 61fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * </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