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