1ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim/*
2ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * Copyright (C) 2015 The Android Open Source Project
3ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim *
4ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * Licensed under the Apache License, Version 2.0 (the "License");
5ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * you may not use this file except in compliance with the License.
6ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * You may obtain a copy of the License at
7ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim *
8ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim *      http://www.apache.org/licenses/LICENSE-2.0
9ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim *
10ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * Unless required by applicable law or agreed to in writing, software
11ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * distributed under the License is distributed on an "AS IS" BASIS,
12ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * See the License for the specific language governing permissions and
14ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * limitations under the License.
15ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim */
16ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim
17ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimpackage android.support.v7.app;
18ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim
19ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimimport android.content.Context;
20d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seoimport android.graphics.Color;
21ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimimport android.graphics.PorterDuff;
22ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimimport android.graphics.drawable.Drawable;
23ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimimport android.support.v7.mediarouter.R;
24ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimimport android.support.v7.widget.AppCompatSeekBar;
25ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimimport android.util.AttributeSet;
26d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seoimport android.util.Log;
27ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim
28ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim/**
29ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim * Volume slider with showing, hiding, and applying alpha supports to the thumb.
30ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim */
31ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kimclass MediaRouteVolumeSlider extends AppCompatSeekBar {
32d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    private static final String TAG = "MediaRouteVolumeSlider";
33d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo
34d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    private final float mDisabledAlpha;
35d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo
360b72510d7bc402b71065e069852d10a8592d55deJaewan Kim    private boolean mHideThumb;
37ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    private Drawable mThumb;
380b72510d7bc402b71065e069852d10a8592d55deJaewan Kim    private int mColor;
39ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim
40ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    public MediaRouteVolumeSlider(Context context) {
41d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        this(context, null);
42ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    }
43ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim
44ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    public MediaRouteVolumeSlider(Context context, AttributeSet attrs) {
456759b1021d8198ad1d239bb30e5a102b99624bceAdam Lesinski        this(context, attrs, android.support.v7.appcompat.R.attr.seekBarStyle);
46ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    }
47ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim
48ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    public MediaRouteVolumeSlider(Context context, AttributeSet attrs, int defStyleAttr) {
49ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim        super(context, attrs, defStyleAttr);
50d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        mDisabledAlpha = MediaRouterThemeHelper.getDisabledAlpha(context);
51ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    }
52ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim
53ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    @Override
54ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    protected void drawableStateChanged() {
55ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim        super.drawableStateChanged();
56d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        int alpha = isEnabled() ? 0xFF : (int) (0xFF * mDisabledAlpha);
57f5e8e4e6c1e751584b95194b9a55d30563dd7d7dJae Seo
58f5e8e4e6c1e751584b95194b9a55d30563dd7d7dJae Seo        // The thumb drawable is a collection of drawables and its current drawables are changed per
59f5e8e4e6c1e751584b95194b9a55d30563dd7d7dJae Seo        // state. Apply the color filter and alpha on every state change.
60f5e8e4e6c1e751584b95194b9a55d30563dd7d7dJae Seo        mThumb.setColorFilter(mColor, PorterDuff.Mode.SRC_IN);
610b72510d7bc402b71065e069852d10a8592d55deJaewan Kim        mThumb.setAlpha(alpha);
62f5e8e4e6c1e751584b95194b9a55d30563dd7d7dJae Seo
630b72510d7bc402b71065e069852d10a8592d55deJaewan Kim        getProgressDrawable().setColorFilter(mColor, PorterDuff.Mode.SRC_IN);
64f5e8e4e6c1e751584b95194b9a55d30563dd7d7dJae Seo        getProgressDrawable().setAlpha(alpha);
650b72510d7bc402b71065e069852d10a8592d55deJaewan Kim    }
660b72510d7bc402b71065e069852d10a8592d55deJaewan Kim
67d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    @Override
68d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    public void setThumb(Drawable thumb) {
69d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        mThumb = thumb;
70d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        super.setThumb(mHideThumb ? null : mThumb);
71d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    }
72d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo
730b72510d7bc402b71065e069852d10a8592d55deJaewan Kim    /**
74d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo     * Sets whether to show or hide thumb.
750b72510d7bc402b71065e069852d10a8592d55deJaewan Kim     */
760b72510d7bc402b71065e069852d10a8592d55deJaewan Kim    public void setHideThumb(boolean hideThumb) {
770b72510d7bc402b71065e069852d10a8592d55deJaewan Kim        if (mHideThumb == hideThumb) {
780b72510d7bc402b71065e069852d10a8592d55deJaewan Kim            return;
790b72510d7bc402b71065e069852d10a8592d55deJaewan Kim        }
800b72510d7bc402b71065e069852d10a8592d55deJaewan Kim        mHideThumb = hideThumb;
810b72510d7bc402b71065e069852d10a8592d55deJaewan Kim        super.setThumb(mHideThumb ? null : mThumb);
82ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim    }
83d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo
84d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    /**
85d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo     * Sets the volume slider color. The change takes effect next time drawable state is changed.
86d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo     * <p>
87d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo     * The color cannot be translucent, otherwise the underlying progress bar will be seen through
88d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo     * the thumb.
89d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo     * </p>
90d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo     */
91d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    public void setColor(int color) {
92d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        if (mColor == color) {
93d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo            return;
94d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        }
95d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        if (Color.alpha(color) != 0xFF) {
96d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo            Log.e(TAG, "Volume slider color cannot be translucent: #" + Integer.toHexString(color));
97d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        }
98d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo        mColor = color;
99d807ca0f601dc0b9807e0ed635b3f502fddec083Jae Seo    }
100ea15dd5d0313d55452f552d8583eb230b2c9506fJaewan Kim}
101