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