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