110e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes/*
210e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * Copyright (C) 2014 The Android Open Source Project
310e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes *
410e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
510e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * you may not use this file except in compliance with the License.
610e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * You may obtain a copy of the License at
710e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes *
810e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
910e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes *
1010e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * Unless required by applicable law or agreed to in writing, software
1110e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
1210e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1310e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * See the License for the specific language governing permissions and
1410e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * limitations under the License.
1510e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes */
1610e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
1710e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banespackage android.support.v7.widget;
1810e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
1910e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banesimport android.content.Context;
20b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banesimport android.graphics.Canvas;
218f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viveretteimport android.support.annotation.RequiresApi;
2210e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banesimport android.support.v7.appcompat.R;
2310e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banesimport android.util.AttributeSet;
2410e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banesimport android.widget.SeekBar;
2510e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
2610e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes/**
27de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * A {@link SeekBar} which supports compatible features on older versions of the platform.
2810e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes *
29de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * <p>This will automatically be used when you use {@link SeekBar} in your layouts
30de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * and the top-level activity / dialog is provided by
31de8d2ecb44867a66d749dd49cea36eb2a425924cKirill Grouchnikov * <a href="{@docRoot}topic/libraries/support-library/packages.html#v7-appcompat">appcompat</a>.
3210e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes * You should only need to manually use this class when writing custom views.</p>
3310e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes */
3410e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banespublic class AppCompatSeekBar extends SeekBar {
3510e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
3629def828b59307ae6bfec1e5da8c44b7e651ddcfKirill Grouchnikov    private final AppCompatSeekBarHelper mAppCompatSeekBarHelper;
3710e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
3810e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes    public AppCompatSeekBar(Context context) {
3910e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes        this(context, null);
4010e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes    }
4110e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
4210e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes    public AppCompatSeekBar(Context context, AttributeSet attrs) {
4310e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes        this(context, attrs, R.attr.seekBarStyle);
4410e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes    }
4510e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
4610e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes    public AppCompatSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
4710e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes        super(context, attrs, defStyleAttr);
4810e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
494c99f0e29b0926d8e5de44b7e3980d47f052f04cChris Banes        mAppCompatSeekBarHelper = new AppCompatSeekBarHelper(this);
5010e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes        mAppCompatSeekBarHelper.loadFromAttributes(attrs, defStyleAttr);
5110e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes    }
5210e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes
53b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    @Override
54ad1b0e82100ee31e70040d77bfa4d847b2bf0864Aurimas Liutikas    protected synchronized void onDraw(Canvas canvas) {
55b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes        super.onDraw(canvas);
56b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes        mAppCompatSeekBarHelper.drawTickMarks(canvas);
57b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    }
58b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes
59b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    @Override
60b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    protected void drawableStateChanged() {
61b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes        super.drawableStateChanged();
62b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes        mAppCompatSeekBarHelper.drawableStateChanged();
63b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    }
64b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes
658f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette    @RequiresApi(11)
66b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    @Override
67b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    public void jumpDrawablesToCurrentState() {
68b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes        super.jumpDrawablesToCurrentState();
69b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes        mAppCompatSeekBarHelper.jumpDrawablesToCurrentState();
70b19cba1c83a68efb5c18ef74e4e5d376fa166625Chris Banes    }
7110e2dbc1ad1c01d2824d921a8b0f070859d6f146Chris Banes}
72