package Ġcom . had iy ar aj esh . flow ers ample . extensions Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Animation Utils Ċ import Ġcom . google . android . material . circular reveal . card view . Circular Re veal Card View Ċ import Ġcom . had iy ar aj esh . flower . Resource Ċ import Ġcom . had iy ar aj esh . flow ers ample . ui . MainActivity ViewModel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlin . math . h ypot Ċ Ċ fun ĠView . hide () Ġ{ ĊĠĠĠ Ġthis . visibility Ġ= ĠView . IN VISIBLE Ċ } Ċ Ċ fun ĠView . show () Ġ{ ĊĠĠĠ Ġthis . visibility Ġ= ĠView . VISIBLE Ċ } Ċ Ċ fun ĠCircular Re veal Card View . hide ( update Current Animator : Ġ( Animator ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . post Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġruntime Ġversion Ġis Ġat Ġleast ĠL ol lip op ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ== ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġcenter Ġfor Ġthe Ġclipping Ġcircle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcx Ġ= Ġthis @ hide . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcy Ġ= Ġthis @ hide . height Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġinitial Ġradius Ġfor Ġthe Ġclipping Ġcircle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Radius Ġ= ĠMath . h ypot ( cx . toDouble (), Ġcy . toDouble ()). toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġthe Ġanimation Ġ( the Ġfinal Ġradius Ġis Ġzero ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠView Animation Utils . create Circular Re veal ( this @ hide , Ġcx , Ġcy , Ġinitial Radius , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Current Animator ( anim ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmake Ġthe Ġview Ġinvisible Ġwhen Ġthe Ġanimation Ġis Ġdone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ?. addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ hide . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġthe Ġanimation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ?. start () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġview Ġto Ġvisible Ġwithout Ġa Ġcircular Ġreveal Ġanimation Ġbelow ĠL ol lip op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ hide . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCircular Re veal Card View . show ( update Current Animator : Ġ( Animator ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . post Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġruntime Ġversion Ġis Ġat Ġleast ĠL ol lip op ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġcenter Ġfor Ġthe Ġclipping Ġcircle ĊĠĠĠĠĠĠĠ Ġval Ġcx Ġ= Ġthis @ show . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġcy Ġ= Ġthis @ show . height Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġfinal Ġradius Ġfor Ġthe Ġclipping Ġcircle ĊĠĠĠĠĠĠĠ Ġval Ġfinal Radius Ġ= Ġh ypot ( cx . toDouble (), Ġcy . toDouble ()). toFloat () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġthe Ġanim ator Ġfor Ġthis Ġview Ġ( the Ġstart Ġradius Ġis Ġzero ) ĊĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠView Animation Utils . create Circular Re veal ( this @ show , Ġcx , Ġcy , Ġ 0 f , Ġfinal Radius ) ĊĠĠĠĠĠĠĠ Ġupdate Current Animator ( anim ) ĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġthe Ġview Ġvisible Ġand Ġstart Ġthe Ġanimation ĊĠĠĠĠĠĠĠ Ġthis @ show . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġanim ?. start () ĊĠĠĠ Ġ} Ċ } Ċ Ċ suspend Ġfun Ġ< T > ĠFlow < Resource < T >> . fold Api States ( ĊĠĠĠ ĠonSuccess : Ġsuspend Ġ( T ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Loading : Ġsuspend Ġ( MainActivity ViewModel . State . Loading State ) Ġ-> ĠUnit , ĊĠĠĠ ĠonError : Ġsuspend Ġ( MainActivity ViewModel . State . Error State ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġthis . collect Ġ{ Ġresource : ĠResource < T > Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( resource . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Loading ( MainActivity ViewModel . State . Loading State ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource . data ?. let Ġ{ ĠonSuccess ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity ViewModel . State . Success State ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( MainActivity ViewModel . State . Error State ( resource . message Ġ?: Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ