IconMixin.java revision 58195c5316855122593366bd867ed51a91bd5c11
1b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik/*
2b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * Copyright (C) 2017 The Android Open Source Project
3b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *
4b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * Licensed under the Apache License, Version 2.0 (the "License");
5b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * you may not use this file except in compliance with the License.
6b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * You may obtain a copy of the License at
7b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *
8b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *      http://www.apache.org/licenses/LICENSE-2.0
9b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *
10b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * Unless required by applicable law or agreed to in writing, software
11b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * distributed under the License is distributed on an "AS IS" BASIS,
12b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * See the License for the specific language governing permissions and
14b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * limitations under the License.
15b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik */
16b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
17b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikpackage com.android.setupwizardlib.template;
18b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
19b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikimport android.content.Context;
20b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikimport android.content.res.TypedArray;
21b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikimport android.graphics.drawable.Drawable;
221bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reckimport android.util.AttributeSet;
239fded232a9548a304e0145011df8849fba0dcda7Chris Craikimport android.view.View;
24b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikimport android.widget.ImageView;
25b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
26b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikimport com.android.setupwizardlib.R;
27a1717271caac5e8ea3808c331d4141ac01a42134Chris Craikimport com.android.setupwizardlib.TemplateLayout;
28a1717271caac5e8ea3808c331d4141ac01a42134Chris Craik
29b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik/**
30b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * A {@link Mixin} for setting an icon on the template layout.
31b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik */
32d3daa3198e2212c985c634821682d5819346b653Chris Craikpublic class IconMixin implements Mixin {
339fded232a9548a304e0145011df8849fba0dcda7Chris Craik
349fded232a9548a304e0145011df8849fba0dcda7Chris Craik    private TemplateLayout mTemplateLayout;
351bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck
361bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck    /**
3798787e6c9b2c10b1ab7820bdac168686025b924aChris Craik     * @param layout The template layout that this Mixin is a part of.
380b7e8245db728d127ada698be63d78b33fc6e4daChris Craik     * @param attrs XML attributes given to the layout.
390b7e8245db728d127ada698be63d78b33fc6e4daChris Craik     * @param defStyleAttr The default style attribute as given to the constructor of the layout.
400b7e8245db728d127ada698be63d78b33fc6e4daChris Craik     */
4174af6e282f8a8f75928a071e8200039517cf5c12Chris Craik    public IconMixin(TemplateLayout layout, AttributeSet attrs, int defStyleAttr) {
4274af6e282f8a8f75928a071e8200039517cf5c12Chris Craik        mTemplateLayout = layout;
4374af6e282f8a8f75928a071e8200039517cf5c12Chris Craik        final Context context = layout.getContext();
4474af6e282f8a8f75928a071e8200039517cf5c12Chris Craik
4598787e6c9b2c10b1ab7820bdac168686025b924aChris Craik        final TypedArray a =
46d3daa3198e2212c985c634821682d5819346b653Chris Craik                context.obtainStyledAttributes(attrs, R.styleable.SuwIconMixin, defStyleAttr, 0);
47d3daa3198e2212c985c634821682d5819346b653Chris Craik
4802806288d1c56475413888a934c796e6e4eb11c5Chris Craik        final Drawable icon = a.getDrawable(R.styleable.SuwIconMixin_android_icon);
491bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck        if (icon != null) {
501bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck            setIcon(icon);
5102806288d1c56475413888a934c796e6e4eb11c5Chris Craik        }
5202806288d1c56475413888a934c796e6e4eb11c5Chris Craik
5302806288d1c56475413888a934c796e6e4eb11c5Chris Craik        a.recycle();
5402806288d1c56475413888a934c796e6e4eb11c5Chris Craik    }
551bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck
5602806288d1c56475413888a934c796e6e4eb11c5Chris Craik    /**
5702806288d1c56475413888a934c796e6e4eb11c5Chris Craik     * Sets the icon on this layout. The icon can also be set in XML using {@code android:icon}.
580b7e8245db728d127ada698be63d78b33fc6e4daChris Craik     *
5937413289478a965336239c731ebfea37ac4dde28Chris Craik     * @param icon A drawable icon.
60818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik     */
615854b34881b1a747ac80b5077869ef270a92b1f4Chris Craik    public void setIcon(Drawable icon) {
620b8d0677be2289bbc9e0b48c0878fb67d1cc0ebdJohn Reck        final ImageView iconView = getView();
635854b34881b1a747ac80b5077869ef270a92b1f4Chris Craik        if (iconView != null) {
64818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik            iconView.setImageDrawable(icon);
65818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik            iconView.setVisibility(icon != null ? View.VISIBLE : View.GONE);
66818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        }
671bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck    }
68975591a7af883d866d86ab819e164c6004694744John Reck
69975591a7af883d866d86ab819e164c6004694744John Reck    /**
70d4fe4d3b30aaefcaaae6a6d1b8dc4bf59e034768Chris Craik     * @return The icon previously set in {@link #setIcon(Drawable)} or {@code android:icon}
71d4fe4d3b30aaefcaaae6a6d1b8dc4bf59e034768Chris Craik     */
721bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck    public Drawable getIcon() {
731bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck        final ImageView iconView = getView();
741bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck        return iconView != null ? iconView.getDrawable() : null;
75818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik    }
76818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik
770b7e8245db728d127ada698be63d78b33fc6e4daChris Craik    /**
7898787e6c9b2c10b1ab7820bdac168686025b924aChris Craik     * @return The ImageView responsible for displaying the icon.
7998787e6c9b2c10b1ab7820bdac168686025b924aChris Craik     */
80818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik    protected ImageView getView() {
81818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        return (ImageView) mTemplateLayout.findManagedViewById(R.id.suw_layout_icon);
825854b34881b1a747ac80b5077869ef270a92b1f4Chris Craik    }
83e5b50197e870aa6d22c3893f5d25f4279f06e5c3Chris Craik}
84e5b50197e870aa6d22c3893f5d25f4279f06e5c3Chris Craik