/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.support.v4.animation; import android.animation.Animator; import android.animation.PropertyValuesHolder; import android.animation.TimeInterpolator; import android.animation.TypeEvaluator; import android.animation.ValueAnimator; import android.view.View; /** * Uses framework Animators to provide ValueAnimatorCompat interface. *

* This is not a fully implemented API which is why it is not public. * * @hide */ class HoneycombMr1AnimatorCompatProvider implements AnimatorProvider { private TimeInterpolator mDefaultInterpolator; @Override public ValueAnimatorCompat emptyValueAnimator() { return new HoneycombValueAnimatorCompat(ValueAnimator.ofFloat(0f, 1f)); } static class HoneycombValueAnimatorCompat implements ValueAnimatorCompat { final Animator mWrapped; public HoneycombValueAnimatorCompat(Animator wrapped) { mWrapped = wrapped; } @Override public void setTarget(View view) { mWrapped.setTarget(view); } @Override public void addListener(AnimatorListenerCompat listener) { mWrapped.addListener(new AnimatorListenerCompatWrapper(listener, this)); } @Override public void setDuration(long duration) { mWrapped.setDuration(duration); } @Override public void start() { mWrapped.start(); } @Override public void cancel() { mWrapped.cancel(); } @Override public void addUpdateListener(final AnimatorUpdateListenerCompat animatorUpdateListener) { if (mWrapped instanceof ValueAnimator) { ((ValueAnimator) mWrapped).addUpdateListener( new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { animatorUpdateListener .onAnimationUpdate(HoneycombValueAnimatorCompat.this); } }); } } @Override public float getAnimatedFraction() { return ((ValueAnimator) mWrapped).getAnimatedFraction(); } } static class AnimatorListenerCompatWrapper implements Animator.AnimatorListener { final AnimatorListenerCompat mWrapped; final ValueAnimatorCompat mValueAnimatorCompat; public AnimatorListenerCompatWrapper( AnimatorListenerCompat wrapped, ValueAnimatorCompat valueAnimatorCompat) { mWrapped = wrapped; mValueAnimatorCompat = valueAnimatorCompat; } @Override public void onAnimationStart(Animator animation) { mWrapped.onAnimationStart(mValueAnimatorCompat); } @Override public void onAnimationEnd(Animator animation) { mWrapped.onAnimationEnd(mValueAnimatorCompat); } @Override public void onAnimationCancel(Animator animation) { mWrapped.onAnimationCancel(mValueAnimatorCompat); } @Override public void onAnimationRepeat(Animator animation) { mWrapped.onAnimationRepeat(mValueAnimatorCompat); } } @Override public void clearInterpolator(View view) { if (mDefaultInterpolator == null) { mDefaultInterpolator = new ValueAnimator().getInterpolator(); } view.animate().setInterpolator(mDefaultInterpolator); } }