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