150dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes/*
250dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * Copyright (C) 2015 The Android Open Source Project
350dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes *
450dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
550dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * you may not use this file except in compliance with the License.
650dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * You may obtain a copy of the License at
750dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes *
850dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
950dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes *
1050dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * Unless required by applicable law or agreed to in writing, software
1150dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
1250dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1350dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * See the License for the specific language governing permissions and
1450dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes * limitations under the License.
1550dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes */
1650dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
1750dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banespackage android.support.design.widget;
1850dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
1950dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banesimport android.os.Build;
2050dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banesimport android.view.View;
2150dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
2250dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banesclass ViewUtils {
2350dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
24631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes    static final ValueAnimatorCompat.Creator DEFAULT_ANIMATOR_CREATOR
25631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes            = new ValueAnimatorCompat.Creator() {
26631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes        @Override
27631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes        public ValueAnimatorCompat createAnimator() {
28631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes            return new ValueAnimatorCompat(Build.VERSION.SDK_INT >= 12
29631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes                    ? new ValueAnimatorCompatImplHoneycombMr1()
30631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes                    : new ValueAnimatorCompatImplEclairMr1());
31631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes        }
32631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes    };
33631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes
3450dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    private interface ViewUtilsImpl {
3550dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        void setBoundsViewOutlineProvider(View view);
3650dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    }
3750dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
3850dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    private static class ViewUtilsImplBase implements ViewUtilsImpl {
3950dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        @Override
4050dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        public void setBoundsViewOutlineProvider(View view) {
4150dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes            // no-op
4250dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        }
4350dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    }
4450dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
4550dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    private static class ViewUtilsImplLollipop implements ViewUtilsImpl {
4650dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        @Override
4750dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        public void setBoundsViewOutlineProvider(View view) {
4850dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes            ViewUtilsLollipop.setBoundsViewOutlineProvider(view);
4950dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        }
5050dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    }
5150dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
5250dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    private static final ViewUtilsImpl IMPL;
5350dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
5450dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    static {
5550dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        final int version = Build.VERSION.SDK_INT;
5650dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        if (version >= 21) {
5750dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes            IMPL = new ViewUtilsImplLollipop();
5850dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        } else {
5950dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes            IMPL = new ViewUtilsImplBase();
6050dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        }
6150dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    }
6250dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
6350dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    static void setBoundsViewOutlineProvider(View view) {
6450dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes        IMPL.setBoundsViewOutlineProvider(view);
6550dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes    }
6650dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes
67631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes    static ValueAnimatorCompat createAnimator() {
68631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes        return DEFAULT_ANIMATOR_CREATOR.createAnimator();
69631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes    }
70631f64ec9c6255f38a7f746d7949b6a537c1180fChris Banes
7150dfc33a565c4aefe6d5e844c93aa24a74cb80b3Chris Banes}
72