11558893b873cd55b2df779f594f1de3c370d3328Adam Cohenpackage com.android.launcher3.util;
21558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
31558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.animation.Animator;
41558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.animation.AnimatorListenerAdapter;
51558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.animation.ValueAnimator;
61558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.animation.ValueAnimator.AnimatorUpdateListener;
71558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.annotation.TargetApi;
81558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.os.Build;
91558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.view.View;
101558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport android.view.ViewOutlineProvider;
111558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
121558893b873cd55b2df779f594f1de3c370d3328Adam Cohenimport com.android.launcher3.Utilities;
131558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
141558893b873cd55b2df779f594f1de3c370d3328Adam Cohen@TargetApi(Build.VERSION_CODES.LOLLIPOP)
151558893b873cd55b2df779f594f1de3c370d3328Adam Cohenpublic class UiThreadCircularReveal {
161558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
171558893b873cd55b2df779f594f1de3c370d3328Adam Cohen    public static ValueAnimator createCircularReveal(View v, int x, int y, float r0, float r1) {
182245fa23796fe6243521f0dff172a39a62bff54cSunny Goyal        return createCircularReveal(v, x, y, r0, r1, ViewOutlineProvider.BACKGROUND);
192245fa23796fe6243521f0dff172a39a62bff54cSunny Goyal    }
202245fa23796fe6243521f0dff172a39a62bff54cSunny Goyal
212245fa23796fe6243521f0dff172a39a62bff54cSunny Goyal    public static ValueAnimator createCircularReveal(View v, int x, int y, float r0, float r1,
222245fa23796fe6243521f0dff172a39a62bff54cSunny Goyal            final ViewOutlineProvider originalProvider) {
231558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
241558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
251558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        final View revealView = v;
261558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        final RevealOutlineProvider outlineProvider = new RevealOutlineProvider(x, y, r0, r1);
271558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        final float elevation = v.getElevation();
281558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
291558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        va.addListener(new AnimatorListenerAdapter() {
301558893b873cd55b2df779f594f1de3c370d3328Adam Cohen            public void onAnimationStart(Animator animation) {
311558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                revealView.setOutlineProvider(outlineProvider);
321558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                revealView.setClipToOutline(true);
331558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                revealView.setTranslationZ(-elevation);
341558893b873cd55b2df779f594f1de3c370d3328Adam Cohen            }
351558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
361558893b873cd55b2df779f594f1de3c370d3328Adam Cohen            public void onAnimationEnd(Animator animation) {
371558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                revealView.setOutlineProvider(originalProvider);
381558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                revealView.setClipToOutline(false);
391558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                revealView.setTranslationZ(0);
401558893b873cd55b2df779f594f1de3c370d3328Adam Cohen            }
411558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
421558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        });
431558893b873cd55b2df779f594f1de3c370d3328Adam Cohen
441558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        va.addUpdateListener(new AnimatorUpdateListener() {
451558893b873cd55b2df779f594f1de3c370d3328Adam Cohen            @Override
461558893b873cd55b2df779f594f1de3c370d3328Adam Cohen            public void onAnimationUpdate(ValueAnimator arg0) {
471558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                float progress = arg0.getAnimatedFraction();
481558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                outlineProvider.setProgress(progress);
4954e362121fbd12d738430c1dea4a63a363468d9cAdam Cohen                revealView.invalidateOutline();
509fc953b94dbc6b99e6de08c9dcc80a0cb8e3e319Sunny Goyal                if (!Utilities.ATLEAST_LOLLIPOP_MR1) {
511558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                    revealView.invalidate();
521558893b873cd55b2df779f594f1de3c370d3328Adam Cohen                }
531558893b873cd55b2df779f594f1de3c370d3328Adam Cohen            }
541558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        });
551558893b873cd55b2df779f594f1de3c370d3328Adam Cohen        return va;
561558893b873cd55b2df779f594f1de3c370d3328Adam Cohen    }
571558893b873cd55b2df779f594f1de3c370d3328Adam Cohen}
58