GlifLayout.java revision b01f3ef075d501d1f61e6f61794a5cadd3ff2026
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; 24fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.os.Build.VERSION_CODES; 25fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.util.AttributeSet; 26fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.LayoutInflater; 27fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.View; 28fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.ViewGroup; 29fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ImageView; 30fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ScrollView; 31fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.TextView; 32fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 33fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam/** 34fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Layout for the GLIF theme used in Setup Wizard for N. 35fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * 36fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <p>Example usage: 37fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <pre>{@code 38fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <com.android.setupwizardlib.GlifLayout 39fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * xmlns:android="http://schemas.android.com/apk/res/android" 40fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * xmlns:app="http://schemas.android.com/apk/res-auto" 41fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * android:layout_width="match_parent" 42fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * android:layout_height="match_parent" 43fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * android:icon="@drawable/my_icon" 44fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * app:suwHeaderText="@string/my_title"> 45fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * 46fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * <!-- Content here --> 47fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * 48fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * </com.android.setupwizardlib.GlifLayout> 49fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * }</pre> 50fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam */ 51fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampublic class GlifLayout extends TemplateLayout { 52fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 53fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam private static final String TAG = "GlifLayout"; 54fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 55fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context) { 56fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam this(context, 0, 0); 57fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 58fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 59fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, int template) { 60fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam this(context, template, 0); 61fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 62fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 63fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, int template, int containerId) { 64fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam super(context, template, containerId); 65fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam init(null, R.attr.suwLayoutTheme); 66fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 67fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 68fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, AttributeSet attrs) { 69fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam super(context, attrs); 70fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam init(attrs, R.attr.suwLayoutTheme); 71fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 72fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 73fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @TargetApi(VERSION_CODES.HONEYCOMB) 74fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public GlifLayout(Context context, AttributeSet attrs, int defStyleAttr) { 75fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam super(context, attrs, defStyleAttr); 76fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam init(attrs, defStyleAttr); 77fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 78fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 79fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam // All the constructors delegate to this init method. The 3-argument constructor is not 80fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam // available in LinearLayout before v11, so call super with the exact same arguments. 81fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam private void init(AttributeSet attrs, int defStyleAttr) { 82fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam final TypedArray a = getContext().obtainStyledAttributes(attrs, 83fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam R.styleable.SuwGlifLayout, defStyleAttr, 0); 84fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 85fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam final Drawable icon = a.getDrawable(R.styleable.SuwGlifLayout_android_icon); 86fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (icon != null) { 87fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam setIcon(icon); 88fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 89fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 90fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam // Set the header color 91fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam final ColorStateList headerColor = 92fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam a.getColorStateList(R.styleable.SuwGlifLayout_suwHeaderColor); 93fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (headerColor != null) { 94fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam setHeaderColor(headerColor); 95fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 96fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 97fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 98fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam // Set the header text 99fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam final CharSequence headerText = 100fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam a.getText(R.styleable.SuwGlifLayout_suwHeaderText); 101fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (headerText != null) { 102fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam setHeaderText(headerText); 103fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 104fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 105fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam a.recycle(); 106fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 107fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 108fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @Override 109fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam protected View onInflateTemplate(LayoutInflater inflater, int template) { 110fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (template == 0) { 111fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam template = R.layout.suw_glif_template; 112fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 113fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return super.onInflateTemplate(inflater, template); 114fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 115fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 116fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam @Override 117fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam protected ViewGroup findContainer(int containerId) { 118fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (containerId == 0) { 119fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam containerId = R.id.suw_layout_content; 120fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 121fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return super.findContainer(containerId); 122fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 123fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 124fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public ScrollView getScrollView() { 125fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam final View view = findViewById(R.id.suw_scroll_view); 126fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return view instanceof ScrollView ? (ScrollView) view : null; 127fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 128fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 129b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam protected TextView getHeaderTextView() { 130b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam return (TextView) findViewById(R.id.suw_layout_title); 131b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam } 132b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam 133fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderText(int title) { 134b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam setHeaderText(getContext().getResources().getText(title)); 135fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 136fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 137fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderText(CharSequence title) { 138b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam final TextView titleView = getHeaderTextView(); 139fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (titleView != null) { 140fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam titleView.setText(title); 141fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 142fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 143fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 144fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public CharSequence getHeaderText() { 145b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam final TextView titleView = getHeaderTextView(); 146fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return titleView != null ? titleView.getText() : null; 147fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 148fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 149fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setHeaderColor(ColorStateList color) { 150b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam final TextView titleView = getHeaderTextView(); 151fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (titleView != null) { 152fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam titleView.setTextColor(color); 153fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 154fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 155fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 156fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public ColorStateList getHeaderColor() { 157b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam final TextView titleView = getHeaderTextView(); 158fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return titleView != null ? titleView.getTextColors() : null; 159fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 160fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 161fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public void setIcon(Drawable icon) { 162fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam final ImageView iconView = getIconView(); 163fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam if (iconView != null) { 164fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam iconView.setImageDrawable(icon); 165fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 166fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 167fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 168fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam public Drawable getIcon() { 169fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam final ImageView iconView = getIconView(); 170fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return iconView != null ? iconView.getDrawable() : null; 171fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 172fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam 173b01f3ef075d501d1f61e6f61794a5cadd3ff2026Maurice Lam protected ImageView getIconView() { 174fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam return (ImageView) findViewById(R.id.suw_layout_icon); 175fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam } 176fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam} 177