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 Boyarclass HoneycombMr1AnimatorCompatProvider implements AnimatorProvider { 32e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 33d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev private TimeInterpolator mDefaultInterpolator; 34d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev 35e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 36e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public ValueAnimatorCompat emptyValueAnimator() { 37e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar return new HoneycombValueAnimatorCompat(ValueAnimator.ofFloat(0f, 1f)); 38e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 39e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 40e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar static class HoneycombValueAnimatorCompat implements ValueAnimatorCompat { 41e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 42e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar final Animator mWrapped; 43e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 44e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public HoneycombValueAnimatorCompat(Animator wrapped) { 45e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped = wrapped; 46e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 47e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 48e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 49e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void setTarget(View view) { 50e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.setTarget(view); 51e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 52e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 53e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 54e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void addListener(AnimatorListenerCompat listener) { 55e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.addListener(new AnimatorListenerCompatWrapper(listener, this)); 56e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 57e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 58e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 59e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void setDuration(long duration) { 60e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.setDuration(duration); 61e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 62e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 63e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 64e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void start() { 65e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.start(); 66e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 67e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 68e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 69e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void cancel() { 70e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.cancel(); 71e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 72e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 73e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 74e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void addUpdateListener(final AnimatorUpdateListenerCompat animatorUpdateListener) { 75e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar if (mWrapped instanceof ValueAnimator) { 76e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar ((ValueAnimator) mWrapped).addUpdateListener( 77e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar new ValueAnimator.AnimatorUpdateListener() { 78e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 79e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationUpdate(ValueAnimator animation) { 80e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar animatorUpdateListener 81e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar .onAnimationUpdate(HoneycombValueAnimatorCompat.this); 82e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 83e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar }); 84e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 85e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 86e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 87e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 88e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public float getAnimatedFraction() { 89e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar return ((ValueAnimator) mWrapped).getAnimatedFraction(); 90e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 91e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 92e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 93e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar static class AnimatorListenerCompatWrapper implements Animator.AnimatorListener { 94e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 95e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar final AnimatorListenerCompat mWrapped; 96e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 97e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar final ValueAnimatorCompat mValueAnimatorCompat; 98e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 99e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public AnimatorListenerCompatWrapper( 100e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar AnimatorListenerCompat wrapped, ValueAnimatorCompat valueAnimatorCompat) { 101e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped = wrapped; 102e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mValueAnimatorCompat = valueAnimatorCompat; 103e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 104e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 105e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 106e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationStart(Animator animation) { 107e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationStart(mValueAnimatorCompat); 108e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 109e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 110e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 111e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationEnd(Animator animation) { 112e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationEnd(mValueAnimatorCompat); 113e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 114e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 115e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 116e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationCancel(Animator animation) { 117e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationCancel(mValueAnimatorCompat); 118e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 119e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar 120e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar @Override 121e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar public void onAnimationRepeat(Animator animation) { 122e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar mWrapped.onAnimationRepeat(mValueAnimatorCompat); 123e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 124e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar } 125d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev 126d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev @Override 127d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev public void clearInterpolator(View view) { 128d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev if (mDefaultInterpolator == null) { 129d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev mDefaultInterpolator = new ValueAnimator().getInterpolator(); 130d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev } 131d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev view.animate().setInterpolator(mDefaultInterpolator); 132d03a495b04ee74c1cb493cee0d5998b895b1c79bVladislav Kaznacheev } 133e71a1df9b3c0e1bd3c21a1b3dd20a41790d4a950Yigit Boyar} 134