164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki/*
264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Copyright (C) 2015 The Android Open Source Project
364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki *
464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * you may not use this file except in compliance with the License.
664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * You may obtain a copy of the License at
764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki *
864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki *
1064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * Unless required by applicable law or agreed to in writing, software
1164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
1264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * See the License for the specific language governing permissions and
1464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * limitations under the License.
1564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */
1664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
1764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakipackage android.support.design.internal;
1864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
198e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikasimport static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
208e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas
2164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.content.Context;
2264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.content.res.TypedArray;
2364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.graphics.Canvas;
2464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.graphics.Rect;
2564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.graphics.drawable.Drawable;
2664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.support.annotation.NonNull;
278f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viveretteimport android.support.annotation.RequiresApi;
28c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo;
2964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.support.design.R;
3064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.support.v7.widget.LinearLayoutCompat;
3164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.util.AttributeSet;
3264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakiimport android.view.Gravity;
3364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
3464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki/**
3564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki * @hide
3664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki */
378e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas@RestrictTo(LIBRARY_GROUP)
3864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Arakipublic class ForegroundLinearLayout extends LinearLayoutCompat {
3964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
4064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    private Drawable mForeground;
4164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
4264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    private final Rect mSelfBounds = new Rect();
4364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
4464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    private final Rect mOverlayBounds = new Rect();
4564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
4664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    private int mForegroundGravity = Gravity.FILL;
4764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
4864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    protected boolean mForegroundInPadding = true;
4964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
5064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    boolean mForegroundBoundsChanged = false;
5164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
5264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public ForegroundLinearLayout(Context context) {
5336459054e2064f283ae1f80b8d315e1428ba61deYuichi Araki        this(context, null);
5464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
5564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
5664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public ForegroundLinearLayout(Context context, AttributeSet attrs) {
5764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        this(context, attrs, 0);
5864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
5964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
6064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public ForegroundLinearLayout(Context context, AttributeSet attrs, int defStyle) {
6164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        super(context, attrs, defStyle);
6264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
6364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundLinearLayout,
6464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                defStyle, 0);
6564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
6664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        mForegroundGravity = a.getInt(
6764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                R.styleable.ForegroundLinearLayout_android_foregroundGravity, mForegroundGravity);
6864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
6964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        final Drawable d = a.getDrawable(R.styleable.ForegroundLinearLayout_android_foreground);
7064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        if (d != null) {
7164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            setForeground(d);
7264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        }
7364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
7464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        mForegroundInPadding = a.getBoolean(
7564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                R.styleable.ForegroundLinearLayout_foregroundInsidePadding, true);
7664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
7764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        a.recycle();
7864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
7964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
8064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    /**
8164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * Describes how the foreground is positioned.
8264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     *
8364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * @return foreground gravity.
8464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * @see #setForegroundGravity(int)
8564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     */
86e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas    @Override
8764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public int getForegroundGravity() {
8864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        return mForegroundGravity;
8964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
9064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
9164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    /**
9264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * Describes how the foreground is positioned. Defaults to START and TOP.
9364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     *
9464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * @param foregroundGravity See {@link android.view.Gravity}
9564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * @see #getForegroundGravity()
9664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     */
97e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas    @Override
9864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public void setForegroundGravity(int foregroundGravity) {
9964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        if (mForegroundGravity != foregroundGravity) {
10064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            if ((foregroundGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) {
10164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                foregroundGravity |= Gravity.START;
10264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            }
10364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
10464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            if ((foregroundGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) {
10564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                foregroundGravity |= Gravity.TOP;
10664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            }
10764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
10864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            mForegroundGravity = foregroundGravity;
10964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
11064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            if (mForegroundGravity == Gravity.FILL && mForeground != null) {
11164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                Rect padding = new Rect();
11264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                mForeground.getPadding(padding);
11364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            }
11464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
11564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            requestLayout();
11664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        }
11764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
11864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
11964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    @Override
12064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    protected boolean verifyDrawable(Drawable who) {
12164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        return super.verifyDrawable(who) || (who == mForeground);
12264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
12364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
1248f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette    @RequiresApi(11)
12564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    @Override
12664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public void jumpDrawablesToCurrentState() {
12764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        super.jumpDrawablesToCurrentState();
12864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        if (mForeground != null) {
12964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            mForeground.jumpToCurrentState();
13064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        }
13164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
13264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
13364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    @Override
13464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    protected void drawableStateChanged() {
13564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        super.drawableStateChanged();
13664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        if (mForeground != null && mForeground.isStateful()) {
13764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            mForeground.setState(getDrawableState());
13864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        }
13964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
14064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
14164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    /**
14264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * Supply a Drawable that is to be rendered on top of all of the child
14364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * views in the frame layout.  Any padding in the Drawable will be taken
14464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * into account by ensuring that the children are inset to be placed
14564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * inside of the padding area.
14664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     *
14764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * @param drawable The Drawable to be drawn on top of the children.
14864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     */
149e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas    @Override
15064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public void setForeground(Drawable drawable) {
15164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        if (mForeground != drawable) {
15264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            if (mForeground != null) {
15364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                mForeground.setCallback(null);
15464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                unscheduleDrawable(mForeground);
15564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            }
15664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
15764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            mForeground = drawable;
15864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
15964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            if (drawable != null) {
16064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                setWillNotDraw(false);
16164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                drawable.setCallback(this);
16264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                if (drawable.isStateful()) {
16364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                    drawable.setState(getDrawableState());
16464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                }
16564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                if (mForegroundGravity == Gravity.FILL) {
16664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                    Rect padding = new Rect();
16764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                    drawable.getPadding(padding);
16864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                }
16964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            } else {
17064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                setWillNotDraw(true);
17164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            }
17264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            requestLayout();
17364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            invalidate();
17464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        }
17564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
17664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
17764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    /**
17864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * Returns the drawable used as the foreground of this FrameLayout. The
17964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * foreground drawable, if non-null, is always drawn on top of the children.
18064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     *
18164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     * @return A Drawable or null if no foreground was set.
18264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki     */
183e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas    @Override
18464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public Drawable getForeground() {
18564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        return mForeground;
18664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
18764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
18864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    @Override
18964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
19064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        super.onLayout(changed, left, top, right, bottom);
19164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        mForegroundBoundsChanged |= changed;
19264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
19364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
19464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    @Override
19564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
19664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        super.onSizeChanged(w, h, oldw, oldh);
19764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        mForegroundBoundsChanged = true;
19864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
19964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
20064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    @Override
20164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public void draw(@NonNull Canvas canvas) {
20264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        super.draw(canvas);
20364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
20464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        if (mForeground != null) {
20564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            final Drawable foreground = mForeground;
20664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
20764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            if (mForegroundBoundsChanged) {
20864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                mForegroundBoundsChanged = false;
20964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                final Rect selfBounds = mSelfBounds;
21064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                final Rect overlayBounds = mOverlayBounds;
21164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
21264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                final int w = getRight() - getLeft();
21364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                final int h = getBottom() - getTop();
21464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
21564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                if (mForegroundInPadding) {
21664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                    selfBounds.set(0, 0, w, h);
21764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                } else {
21864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                    selfBounds.set(getPaddingLeft(), getPaddingTop(),
21964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                            w - getPaddingRight(), h - getPaddingBottom());
22064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                }
22164bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
22264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                Gravity.apply(mForegroundGravity, foreground.getIntrinsicWidth(),
22364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                        foreground.getIntrinsicHeight(), selfBounds, overlayBounds);
22464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki                foreground.setBounds(overlayBounds);
22564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            }
22664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
22764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            foreground.draw(canvas);
22864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        }
22964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
23064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
2318f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette    @RequiresApi(21)
23264bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    @Override
23364bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    public void drawableHotspotChanged(float x, float y) {
23464bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        super.drawableHotspotChanged(x, y);
23564bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        if (mForeground != null) {
23664bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki            mForeground.setHotspot(x, y);
23764bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki        }
23864bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki    }
23964bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki
24064bcb674cc45ab712a591d4f540d5c13404f3b83Yuichi Araki}
241