17514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam/* 27514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * Copyright (C) 2017 The Android Open Source Project 37514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * 47514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * Licensed under the Apache License, Version 2.0 (the "License"); 57514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * you may not use this file except in compliance with the License. 67514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * You may obtain a copy of the License at 77514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * 87514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * http://www.apache.org/licenses/LICENSE-2.0 97514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * 107514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * Unless required by applicable law or agreed to in writing, software 117514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * distributed under the License is distributed on an "AS IS" BASIS, 127514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * See the License for the specific language governing permissions and 147514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * limitations under the License. 157514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam */ 167514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 177514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lampackage com.android.setupwizardlib.template; 187514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 197514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.content.Context; 207514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.content.res.TypedArray; 217514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.graphics.drawable.Drawable; 2297d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lamimport android.support.annotation.DrawableRes; 237514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.util.AttributeSet; 2458195c5316855122593366bd867ed51a91bd5c11Maurice Lamimport android.view.View; 257514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.widget.ImageView; 267514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 277514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.R; 287514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.TemplateLayout; 297514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 307514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam/** 317514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * A {@link Mixin} for setting an icon on the template layout. 327514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam */ 337514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lampublic class IconMixin implements Mixin { 347514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 357514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam private TemplateLayout mTemplateLayout; 367514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 377514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam /** 387514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * @param layout The template layout that this Mixin is a part of. 397514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * @param attrs XML attributes given to the layout. 407514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * @param defStyleAttr The default style attribute as given to the constructor of the layout. 417514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam */ 427514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public IconMixin(TemplateLayout layout, AttributeSet attrs, int defStyleAttr) { 437514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mTemplateLayout = layout; 447514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final Context context = layout.getContext(); 457514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 467514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final TypedArray a = 477514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam context.obtainStyledAttributes(attrs, R.styleable.SuwIconMixin, defStyleAttr, 0); 487514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 4997d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam final @DrawableRes int icon = a.getResourceId(R.styleable.SuwIconMixin_android_icon, 0); 5097d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam if (icon != 0) { 517514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam setIcon(icon); 527514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 537514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 547514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam a.recycle(); 557514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 567514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 577514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam /** 587514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * Sets the icon on this layout. The icon can also be set in XML using {@code android:icon}. 597514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * 607514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * @param icon A drawable icon. 617514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam */ 627514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public void setIcon(Drawable icon) { 637514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ImageView iconView = getView(); 647514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam if (iconView != null) { 657514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam iconView.setImageDrawable(icon); 6658195c5316855122593366bd867ed51a91bd5c11Maurice Lam iconView.setVisibility(icon != null ? View.VISIBLE : View.GONE); 677514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 687514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 697514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 707514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam /** 7197d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam * Sets the icon on this layout. The icon can also be set in XML using {@code android:icon}. 7297d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam * 7397d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam * @param icon A drawable icon resource. 7497d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam */ 7597d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam public void setIcon(@DrawableRes int icon) { 7697d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam final ImageView iconView = getView(); 7797d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam if (iconView != null) { 7897d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam // Note: setImageResource on the ImageView is overridden in AppCompatImageView for 7997d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam // support lib users, which enables vector drawable compat to work on versions pre-L. 8097d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam iconView.setImageResource(icon); 8197d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam iconView.setVisibility(icon != 0 ? View.VISIBLE : View.GONE); 8297d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam } 8397d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam } 8497d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam 8597d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam /** 867514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * @return The icon previously set in {@link #setIcon(Drawable)} or {@code android:icon} 877514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam */ 887514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public Drawable getIcon() { 897514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ImageView iconView = getView(); 907514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return iconView != null ? iconView.getDrawable() : null; 917514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 927514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 937514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam /** 943514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam * Sets the content description of the icon view 953514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam */ 963514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam public void setContentDescription(CharSequence description) { 973514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam final ImageView iconView = getView(); 983514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam if (iconView != null) { 993514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam iconView.setContentDescription(description); 1003514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam } 1013514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam } 1023514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam 1033514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam /** 1043514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam * @return The content description of the icon view 1053514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam */ 1063514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam public CharSequence getContentDescription() { 1073514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam final ImageView iconView = getView(); 1083514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam return iconView != null ? iconView.getContentDescription() : null; 1093514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam } 1103514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam 1113514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam /** 1127514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * @return The ImageView responsible for displaying the icon. 1137514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam */ 1147514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam protected ImageView getView() { 1157514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam return (ImageView) mTemplateLayout.findManagedViewById(R.id.suw_layout_icon); 1167514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 1177514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam} 118