1e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar/* 2e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * 4e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * you may not use this file except in compliance with the License. 6e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * You may obtain a copy of the License at 7e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * 8e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * 10e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * See the License for the specific language governing permissions and 14e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * limitations under the License. 15e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar */ 16e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 17e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyarpackage android.support.v4.animation; 18e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 19e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyarimport android.animation.Animator; 20e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyarimport android.animation.PropertyValuesHolder; 21d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheevimport android.animation.TimeInterpolator; 22e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyarimport android.animation.TypeEvaluator; 23e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyarimport android.animation.ValueAnimator; 24e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyarimport android.view.View; 25e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 26e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar/** 27e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * Uses framework Animators to provide ValueAnimatorCompat interface. 28e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * <p> 29e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * This is not a fully implemented API which is why it is not public. 30e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * 31e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar * @hide 32e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar */ 33e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyarclass HoneycombMr1AnimatorCompatProvider implements AnimatorProvider { 34e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 35d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev private TimeInterpolator mDefaultInterpolator; 36d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev 37e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 38e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public ValueAnimatorCompat emptyValueAnimator() { 39e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar return new HoneycombValueAnimatorCompat(ValueAnimator.ofFloat(0f, 1f)); 40e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 41e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 42e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar static class HoneycombValueAnimatorCompat implements ValueAnimatorCompat { 43e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 44e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar final Animator mWrapped; 45e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 46e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public HoneycombValueAnimatorCompat(Animator wrapped) { 47e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped = wrapped; 48e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 49e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 50e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 51e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void setTarget(View view) { 52e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.setTarget(view); 53e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 54e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 55e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 56e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void addListener(AnimatorListenerCompat listener) { 57e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.addListener(new AnimatorListenerCompatWrapper(listener, this)); 58e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 59e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 60e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 61e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void setDuration(long duration) { 62e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.setDuration(duration); 63e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 64e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 65e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 66e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void start() { 67e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.start(); 68e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 69e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 70e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 71e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void cancel() { 72e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.cancel(); 73e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 74e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 75e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 76e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void addUpdateListener(final AnimatorUpdateListenerCompat animatorUpdateListener) { 77e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar if (mWrapped instanceof ValueAnimator) { 78e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar ((ValueAnimator) mWrapped).addUpdateListener( 79e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar new ValueAnimator.AnimatorUpdateListener() { 80e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 81e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationUpdate(ValueAnimator animation) { 82e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar animatorUpdateListener 83e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar .onAnimationUpdate(HoneycombValueAnimatorCompat.this); 84e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 85e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar }); 86e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 87e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 88e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 89e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 90e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public float getAnimatedFraction() { 91e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar return ((ValueAnimator) mWrapped).getAnimatedFraction(); 92e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 93e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 94e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 95e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar static class AnimatorListenerCompatWrapper implements Animator.AnimatorListener { 96e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 97e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar final AnimatorListenerCompat mWrapped; 98e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 99e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar final ValueAnimatorCompat mValueAnimatorCompat; 100e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 101e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public AnimatorListenerCompatWrapper( 102e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar AnimatorListenerCompat wrapped, ValueAnimatorCompat valueAnimatorCompat) { 103e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped = wrapped; 104e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mValueAnimatorCompat = valueAnimatorCompat; 105e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 106e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 107e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 108e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationStart(Animator animation) { 109e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationStart(mValueAnimatorCompat); 110e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 111e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 112e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 113e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationEnd(Animator animation) { 114e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationEnd(mValueAnimatorCompat); 115e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 116e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 117e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 118e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationCancel(Animator animation) { 119e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationCancel(mValueAnimatorCompat); 120e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 121e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 122e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 123e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationRepeat(Animator animation) { 124e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationRepeat(mValueAnimatorCompat); 125e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 126e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 127d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev 128d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev @Override 129d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev public void clearInterpolator(View view) { 130d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev if (mDefaultInterpolator == null) { 131d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev mDefaultInterpolator = new ValueAnimator().getInterpolator(); 132d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev } 133d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev view.animate().setInterpolator(mDefaultInterpolator); 134d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev } 135e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar} 136