GlifLayout.java revision 00e551ce2deaeb4414fc5a387d8ea8de6a19876c
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; 440ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lamimport com.android.setupwizardlib.template.RequireScrollMixin; 450ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lamimport com.android.setupwizardlib.template.ScrollViewScrollHandlingDelegate; 46c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lamimport com.android.setupwizardlib.view.StatusBarBackgroundLayout; 47c3eebe9f664af4b77e5948a14bf266b25dc25cc8Maurice Lam 48fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam/** 49fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Layout for the GLIF theme used in Setup Wizard for N. 50fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * 51fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <p>Example usage: 52fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <pre>{@code 53fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <com.android.setupwizardlib.GlifLayout 54fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * xmlns:android="http://schemas.android.com/apk/res/android" 55fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * xmlns:app="http://schemas.android.com/apk/res-auto" 56fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * android:layout_width="match_parent" 57fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * android:layout_height="match_parent" 58fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * android:icon="@drawable/my_icon" 59fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * app:suwHeaderText="@string/my_title"> 60fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * 61fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <!-- Content here --> 62fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * 63fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * </com.android.setupwizardlib.GlifLayout> 64fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * }</pre> 65fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam */ 66fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampublic class GlifLayout extends TemplateLayout { 67fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 68fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam private static final String TAG = "GlifLayout"; 69fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 70ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam private ColorStateList mPrimaryColor; 71ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 7239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam private boolean mBackgroundPatterned = true; 7339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 7439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 7539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * The color of the background. If null, the color will inherit from mPrimaryColor. 7639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 7739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam @Nullable 7839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam private ColorStateList mBackgroundBaseColor; 7939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 8000e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam private boolean mLayoutFullscreen = true; 8100e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam 82fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context) { 83fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam this(context, 0, 0); 84fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 85fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 86fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, int template) { 87fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam this(context, template, 0); 88fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 89fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 90fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, int template, int containerId) { 91fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam super(context, template, containerId); 92fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam init(null, R.attr.suwLayoutTheme); 93fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 94fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 95fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, AttributeSet attrs) { 96fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam super(context, attrs); 97fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam init(attrs, R.attr.suwLayoutTheme); 98fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 99fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 100fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @TargetApi(VERSION_CODES.HONEYCOMB) 101fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, AttributeSet attrs, int defStyleAttr) { 102fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam super(context, attrs, defStyleAttr); 103fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam init(attrs, defStyleAttr); 104fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 105fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 106fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam // All the constructors delegate to this init method. The 3-argument constructor is not 107fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam // available in LinearLayout before v11, so call super with the exact same arguments. 108fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam private void init(AttributeSet attrs, int defStyleAttr) { 1097514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam registerMixin(HeaderMixin.class, new ColoredHeaderMixin(this, attrs, defStyleAttr)); 1107514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam registerMixin(IconMixin.class, new IconMixin(this, attrs, defStyleAttr)); 1117514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam registerMixin(ProgressBarMixin.class, new ProgressBarMixin(this)); 1128721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam registerMixin(ButtonFooterMixin.class, new ButtonFooterMixin(this)); 1130ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam final RequireScrollMixin requireScrollMixin = new RequireScrollMixin(this); 1140ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam registerMixin(RequireScrollMixin.class, requireScrollMixin); 1150ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam 1160ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam final ScrollView scrollView = getScrollView(); 1170ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam if (scrollView != null) { 1180ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam requireScrollMixin.setScrollHandlingDelegate( 1190ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam new ScrollViewScrollHandlingDelegate(requireScrollMixin, scrollView)); 1200ceb8d53e39ebb5bc103863787afb39ec5c41ad8Maurice Lam } 1217514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 122a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam TypedArray a = getContext().obtainStyledAttributes(attrs, 123fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam R.styleable.SuwGlifLayout, defStyleAttr, 0); 124fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 125a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam ColorStateList primaryColor = 126a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam a.getColorStateList(R.styleable.SuwGlifLayout_suwColorPrimary); 127fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam if (primaryColor != null) { 128fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam setPrimaryColor(primaryColor); 129a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam } 130a6d30093e9308a88fc875b484cf16cda385c2f98Maurice Lam 13139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam ColorStateList backgroundColor = 13239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam a.getColorStateList(R.styleable.SuwGlifLayout_suwBackgroundBaseColor); 13339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam setBackgroundBaseColor(backgroundColor); 13439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 13539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam boolean backgroundPatterned = 13639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam a.getBoolean(R.styleable.SuwGlifLayout_suwBackgroundPatterned, true); 13739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam setBackgroundPatterned(backgroundPatterned); 13839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 13948c121912f865be865e564a4d0a899988a100d37Maurice Lam final int footer = a.getResourceId(R.styleable.SuwGlifLayout_suwFooter, 0); 14048c121912f865be865e564a4d0a899988a100d37Maurice Lam if (footer != 0) { 14148c121912f865be865e564a4d0a899988a100d37Maurice Lam inflateFooter(footer); 14248c121912f865be865e564a4d0a899988a100d37Maurice Lam } 14348c121912f865be865e564a4d0a899988a100d37Maurice Lam 14400e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam mLayoutFullscreen = a.getBoolean(R.styleable.SuwGlifLayout_suwLayoutFullscreen, true); 14500e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam 146fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam a.recycle(); 14700e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam 14800e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP && mLayoutFullscreen) { 14900e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 15000e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam } 151fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 152fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 153fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @Override 154e2a8d27c2a43cf0b48b80e5b05f893222c541e04Maurice Lam protected View onInflateTemplate(LayoutInflater inflater, @LayoutRes int template) { 155fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (template == 0) { 156fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam template = R.layout.suw_glif_template; 157fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 158e2a8d27c2a43cf0b48b80e5b05f893222c541e04Maurice Lam return inflateTemplate(inflater, R.style.SuwThemeGlif_Light, template); 159fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 160fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 161fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @Override 162fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam protected ViewGroup findContainer(int containerId) { 163fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (containerId == 0) { 164fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam containerId = R.id.suw_layout_content; 165fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 166fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return super.findContainer(containerId); 167fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 168fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 16948c121912f865be865e564a4d0a899988a100d37Maurice Lam /** 17048c121912f865be865e564a4d0a899988a100d37Maurice Lam * Sets the footer of the layout, which is at the bottom of the content area outside the 17148c121912f865be865e564a4d0a899988a100d37Maurice Lam * scrolling container. The footer can only be inflated once per layout. 17248c121912f865be865e564a4d0a899988a100d37Maurice Lam * 17348c121912f865be865e564a4d0a899988a100d37Maurice Lam * @param footer The layout to be inflated as footer. 17448c121912f865be865e564a4d0a899988a100d37Maurice Lam * @return The root of the inflated footer view. 17548c121912f865be865e564a4d0a899988a100d37Maurice Lam */ 17648c121912f865be865e564a4d0a899988a100d37Maurice Lam public View inflateFooter(@LayoutRes int footer) { 17748c121912f865be865e564a4d0a899988a100d37Maurice Lam ViewStub footerStub = (ViewStub) findManagedViewById(R.id.suw_layout_footer); 17848c121912f865be865e564a4d0a899988a100d37Maurice Lam footerStub.setLayoutResource(footer); 17948c121912f865be865e564a4d0a899988a100d37Maurice Lam return footerStub.inflate(); 18048c121912f865be865e564a4d0a899988a100d37Maurice Lam } 18148c121912f865be865e564a4d0a899988a100d37Maurice Lam 182fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public ScrollView getScrollView() { 18384979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam final View view = findManagedViewById(R.id.suw_scroll_view); 184fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return view instanceof ScrollView ? (ScrollView) view : null; 185fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 186fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 18784979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam public TextView getHeaderTextView() { 1887514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(HeaderMixin.class).getTextView(); 189b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam } 190b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam 191fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderText(int title) { 1927514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(HeaderMixin.class).setText(title); 193fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 194fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 195fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderText(CharSequence title) { 1967514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(HeaderMixin.class).setText(title); 197fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 198fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 199fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public CharSequence getHeaderText() { 2007514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(HeaderMixin.class).getText(); 201fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 202fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 203fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderColor(ColorStateList color) { 2047514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ColoredHeaderMixin mixin = (ColoredHeaderMixin) getMixin(HeaderMixin.class); 2057514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mixin.setColor(color); 206fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 207fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 208fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public ColorStateList getHeaderColor() { 2097514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ColoredHeaderMixin mixin = (ColoredHeaderMixin) getMixin(HeaderMixin.class); 2107514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return mixin.getColor(); 211fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 212fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 213fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setIcon(Drawable icon) { 2147514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(IconMixin.class).setIcon(icon); 215fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 216fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 217fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public Drawable getIcon() { 2187514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(IconMixin.class).getIcon(); 219fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 2200a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam 221fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam /** 222fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam * Sets the primary color of this layout, which will be used to determine the color of the 223fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam * progress bar and the background pattern. 224fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam */ 225fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam public void setPrimaryColor(@NonNull ColorStateList color) { 226ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam mPrimaryColor = color; 22739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam updateBackground(); 2287514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(ProgressBarMixin.class).setColor(color); 229ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 230ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 231ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam public ColorStateList getPrimaryColor() { 232ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam return mPrimaryColor; 233ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 234ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 23539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 23639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * Sets the base color of the background view, which is the status bar for phones and the full- 23739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * screen background for tablets. If {@link #isBackgroundPatterned()} is true, the pattern will 23839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * be drawn with this color. 23939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * 24039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * @param color The color to use as the base color of the background. If {@code null}, 24139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * {@link #getPrimaryColor()} will be used. 24239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 24339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public void setBackgroundBaseColor(@Nullable ColorStateList color) { 24439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam mBackgroundBaseColor = color; 24539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam updateBackground(); 24639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 24739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 24839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 24939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * @return The base color of the background. {@code null} indicates the background will be drawn 25039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * with {@link #getPrimaryColor()}. 25139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 25239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam @Nullable 25339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public ColorStateList getBackgroundBaseColor() { 25439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam return mBackgroundBaseColor; 25539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 25639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 25739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 25839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * Sets whether the background should be {@link GlifPatternDrawable}. If {@code false}, the 25939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * background will be a solid color. 26039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 26139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public void setBackgroundPatterned(boolean patterned) { 26239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam mBackgroundPatterned = patterned; 26339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam updateBackground(); 26439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 26539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 26639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 26739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * @return True if this view uses {@link GlifPatternDrawable} as background. 26839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 26939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public boolean isBackgroundPatterned() { 27039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam return mBackgroundPatterned; 27139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 27239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 27339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam private void updateBackground() { 274fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam final View patternBg = findManagedViewById(R.id.suw_pattern_bg); 275fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam if (patternBg != null) { 27639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam int backgroundColor = 0; 27739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam if (mBackgroundBaseColor != null) { 27839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam backgroundColor = mBackgroundBaseColor.getDefaultColor(); 27939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } else if (mPrimaryColor != null) { 28039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam backgroundColor = mPrimaryColor.getDefaultColor(); 28139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 28239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam Drawable background = mBackgroundPatterned 28339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam ? new GlifPatternDrawable(backgroundColor) 28439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam : new ColorDrawable(backgroundColor); 285fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam if (patternBg instanceof StatusBarBackgroundLayout) { 286fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam ((StatusBarBackgroundLayout) patternBg).setStatusBarBackground(background); 287fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam } else { 288fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam patternBg.setBackgroundDrawable(background); 289fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam } 290fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam } 291ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 292ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 2930a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam public boolean isProgressBarShown() { 2947514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(ProgressBarMixin.class).isShown(); 2950a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam } 2960a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam 2970a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam public void setProgressBarShown(boolean shown) { 2987514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(ProgressBarMixin.class).setShown(shown); 2990a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam } 300ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 301b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam public ProgressBar peekProgressBar() { 3027514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(ProgressBarMixin.class).peekProgressBar(); 303ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 304fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam} 305