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 1443a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam final int stickyHeader = a.getResourceId(R.styleable.SuwGlifLayout_suwStickyHeader, 0); 1453a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam if (stickyHeader != 0) { 1463a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam inflateStickyHeader(stickyHeader); 1473a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam } 1483a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam 14900e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam mLayoutFullscreen = a.getBoolean(R.styleable.SuwGlifLayout_suwLayoutFullscreen, true); 15000e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam 151fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam a.recycle(); 15200e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam 15300e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP && mLayoutFullscreen) { 15400e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 15500e551ce2deaeb4414fc5a387d8ea8de6a19876cMaurice Lam } 156fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 157fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 158fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @Override 159e2a8d27c2a43cf0b48b80e5b05f893222c541e04Maurice Lam protected View onInflateTemplate(LayoutInflater inflater, @LayoutRes int template) { 160fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (template == 0) { 161fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam template = R.layout.suw_glif_template; 162fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 163e2a8d27c2a43cf0b48b80e5b05f893222c541e04Maurice Lam return inflateTemplate(inflater, R.style.SuwThemeGlif_Light, template); 164fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 165fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 166fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @Override 167fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam protected ViewGroup findContainer(int containerId) { 168fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (containerId == 0) { 169fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam containerId = R.id.suw_layout_content; 170fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 171fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return super.findContainer(containerId); 172fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 173fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 17448c121912f865be865e564a4d0a899988a100d37Maurice Lam /** 17548c121912f865be865e564a4d0a899988a100d37Maurice Lam * Sets the footer of the layout, which is at the bottom of the content area outside the 1763a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam * scrolling container. The footer can only be inflated once per instance of this layout. 17748c121912f865be865e564a4d0a899988a100d37Maurice Lam * 17848c121912f865be865e564a4d0a899988a100d37Maurice Lam * @param footer The layout to be inflated as footer. 17948c121912f865be865e564a4d0a899988a100d37Maurice Lam * @return The root of the inflated footer view. 18048c121912f865be865e564a4d0a899988a100d37Maurice Lam */ 18148c121912f865be865e564a4d0a899988a100d37Maurice Lam public View inflateFooter(@LayoutRes int footer) { 1823a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam ViewStub footerStub = findManagedViewById(R.id.suw_layout_footer); 18348c121912f865be865e564a4d0a899988a100d37Maurice Lam footerStub.setLayoutResource(footer); 18448c121912f865be865e564a4d0a899988a100d37Maurice Lam return footerStub.inflate(); 18548c121912f865be865e564a4d0a899988a100d37Maurice Lam } 18648c121912f865be865e564a4d0a899988a100d37Maurice Lam 1873a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam /** 1883a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam * Sets the sticky header (i.e. header that doesn't scroll) of the layout, which is at the top 1893a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam * of the content area outside of the scrolling container. The header can only be inflated once 1903a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam * per instance of this layout. 1913a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam * 1923a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam * @param header The layout to be inflated as the header. 1933a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam * @return The root of the inflated header view. 1943a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam */ 1953a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam public View inflateStickyHeader(@LayoutRes int header) { 1963a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam ViewStub stickyHeaderStub = findManagedViewById(R.id.suw_layout_sticky_header); 1973a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam stickyHeaderStub.setLayoutResource(header); 1983a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam return stickyHeaderStub.inflate(); 1993a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam } 2003a3d478a4b8805992f9558fa8128261970d2ee99Maurice Lam 201fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public ScrollView getScrollView() { 20284979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam final View view = findManagedViewById(R.id.suw_scroll_view); 203fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return view instanceof ScrollView ? (ScrollView) view : null; 204fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 205fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 20684979a6b2874d09762404c3c8a902f4aad016d01Maurice Lam public TextView getHeaderTextView() { 2077514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(HeaderMixin.class).getTextView(); 208b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam } 209b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam 210fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderText(int title) { 2117514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(HeaderMixin.class).setText(title); 212fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 213fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 214fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderText(CharSequence title) { 2157514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(HeaderMixin.class).setText(title); 216fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 217fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 218fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public CharSequence getHeaderText() { 2197514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(HeaderMixin.class).getText(); 220fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 221fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 222fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderColor(ColorStateList color) { 2237514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ColoredHeaderMixin mixin = (ColoredHeaderMixin) getMixin(HeaderMixin.class); 2247514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mixin.setColor(color); 225fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 226fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 227fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public ColorStateList getHeaderColor() { 2287514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ColoredHeaderMixin mixin = (ColoredHeaderMixin) getMixin(HeaderMixin.class); 2297514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return mixin.getColor(); 230fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 231fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 232fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setIcon(Drawable icon) { 2337514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(IconMixin.class).setIcon(icon); 234fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 235fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 236fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public Drawable getIcon() { 2377514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(IconMixin.class).getIcon(); 238fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 2390a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam 240fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam /** 241fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam * Sets the primary color of this layout, which will be used to determine the color of the 242fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam * progress bar and the background pattern. 243fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam */ 244fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam public void setPrimaryColor(@NonNull ColorStateList color) { 245ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam mPrimaryColor = color; 24639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam updateBackground(); 2477514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(ProgressBarMixin.class).setColor(color); 248ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 249ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 250ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam public ColorStateList getPrimaryColor() { 251ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam return mPrimaryColor; 252ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 253ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 25439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 25539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * Sets the base color of the background view, which is the status bar for phones and the full- 25639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * screen background for tablets. If {@link #isBackgroundPatterned()} is true, the pattern will 25739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * be drawn with this color. 25839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * 25939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * @param color The color to use as the base color of the background. If {@code null}, 26039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * {@link #getPrimaryColor()} will be used. 26139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 26239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public void setBackgroundBaseColor(@Nullable ColorStateList color) { 26339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam mBackgroundBaseColor = color; 26439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam updateBackground(); 26539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 26639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 26739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 26839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * @return The base color of the background. {@code null} indicates the background will be drawn 26939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * with {@link #getPrimaryColor()}. 27039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 27139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam @Nullable 27239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public ColorStateList getBackgroundBaseColor() { 27339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam return mBackgroundBaseColor; 27439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 27539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 27639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 27739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * Sets whether the background should be {@link GlifPatternDrawable}. If {@code false}, the 27839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * background will be a solid color. 27939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 28039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public void setBackgroundPatterned(boolean patterned) { 28139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam mBackgroundPatterned = patterned; 28239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam updateBackground(); 28339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 28439056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 28539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam /** 28639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam * @return True if this view uses {@link GlifPatternDrawable} as background. 28739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam */ 28839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam public boolean isBackgroundPatterned() { 28939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam return mBackgroundPatterned; 29039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 29139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam 29239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam private void updateBackground() { 293fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam final View patternBg = findManagedViewById(R.id.suw_pattern_bg); 294fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam if (patternBg != null) { 29539056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam int backgroundColor = 0; 29639056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam if (mBackgroundBaseColor != null) { 29739056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam backgroundColor = mBackgroundBaseColor.getDefaultColor(); 29839056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } else if (mPrimaryColor != null) { 29939056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam backgroundColor = mPrimaryColor.getDefaultColor(); 30039056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam } 30139056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam Drawable background = mBackgroundPatterned 30239056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam ? new GlifPatternDrawable(backgroundColor) 30339056e5dc4b068745c2d9be69e5cd0c008bdc117Maurice Lam : new ColorDrawable(backgroundColor); 304fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam if (patternBg instanceof StatusBarBackgroundLayout) { 305fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam ((StatusBarBackgroundLayout) patternBg).setStatusBarBackground(background); 306fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam } else { 307fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam patternBg.setBackgroundDrawable(background); 308fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam } 309fca3ee628d9d5c1c1109f3df6e02cdd31c57c000Maurice Lam } 310ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 311ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 3120a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam public boolean isProgressBarShown() { 3137514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(ProgressBarMixin.class).isShown(); 3140a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam } 3150a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam 3160a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam public void setProgressBarShown(boolean shown) { 3177514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam getMixin(ProgressBarMixin.class).setShown(shown); 3180a51b2852ce9940075774191dce7b81ce91eb4a1Maurice Lam } 319ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam 320b6fb8bb15f4c6b08eb7f875c21df1005a8679594Maurice Lam public ProgressBar peekProgressBar() { 3217514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return getMixin(ProgressBarMixin.class).peekProgressBar(); 322ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam } 323fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam} 324