package Ġcom . azy oot . re learn . ui . main . cards Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . view . View Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġcom . azy oot . re learn . R Ċ import Ġcom . azy oot . re learn . databinding . Item Re learn Card Binding Ċ import Ġcom . azy oot . re learn . domain . entity . Re Learn Translation Ċ import Ġcom . azy oot . re learn . ui . animation . Group Re veal Animator Ċ import Ġcom . azy oot . re learn . ui . common . set Alpha For Views Ċ import Ġcom . azy oot . re learn . ui . common . setEnabled For Views Ċ import Ġcom . azy oot . re learn . ui . re learn . Re Learn Translation Formatter Ċ import Ġcom . squareup . inject . ass isted . Ass isted Ċ import Ġcom . squareup . inject . ass isted . Ass isted Inject Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠRe Learn Next Card ViewHolder Ġ@ Ass isted Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġre Learn Translation Formatter : ĠRe Learn Translation Formatter , ĊĠĠĠ Ġprivate Ġval Ġgroup Re veal Animator : ĠGroup Re veal Animator , ĊĠĠĠ Ġ@ Ass isted Ġprivate Ġval Ġview Binding : ĠItem Re learn Card Binding Ċ ) Ġ: ĊĠĠĠ ĠRe Learn Card Base ViewHolder ( view Binding . root ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . button Accept . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Listener ( Re Learn Action . Accept Re Learn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview Binding . card . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Listener ( Re Learn Action . View Re Learn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview Binding . button Delete . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Listener ( Re Learn Action . Delete Re Learn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview Binding . show Hide . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions Listener ( Re Learn Action . Set Expanded (! is Re ve aled )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġneeds Re veal Animation ( ĊĠĠĠĠĠĠĠ ĠnewState : ĠRe Learn Card ViewState , ĊĠĠĠĠĠĠĠ Ġold State : ĠRe Learn Card ViewState ĊĠĠĠ Ġ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠnewState Ġ! is ĠRe Learn Card ViewState . Re Learn Translation State Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġold State Ġ! is ĠRe Learn Card ViewState . Re Learn Translation State Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ ĠnewState . is Re ve aled Ġ== Ġold State . is Re ve aled Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġneeds Accepted Animation ( ĊĠĠĠĠĠĠĠ ĠnewState : ĠRe Learn Card ViewState . Re Learn Translation State , ĊĠĠĠĠĠĠĠ Ġold State : ĠRe Learn Card ViewState ĊĠĠĠ Ġ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġold State Ġ! is ĠRe Learn Card ViewState . Re Learn Translation State Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ ĠnewState . re learn State Ġ! is ĠRe Learn Card Re Learn State . Accepted Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġold State . re learn State Ġis ĠRe Learn Card Re Learn State . Accepted Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( newState : ĠRe Learn Card ViewState , Ġold State : ĠRe Learn Card ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Binding Ġstate Ġ$ newState ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRe Learn Card ViewState . Loading , Ġis ĠRe Learn Card ViewState . Initial Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . group Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . group Loaded . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . group Progress . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . group Loaded . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( newState Ġis ĠRe Learn Card ViewState . Re Learn Translation State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . group Actions . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . group Loaded . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Translation Data ( newState . re Learn Translation ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Re veal State ( newState , Ġold State ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( needs Accepted Animation ( newState , Ġold State )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Out Actions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Re veal State ( ĊĠĠĠĠĠĠĠ ĠnewState : ĠRe Learn Card ViewState . Re Learn Translation State , ĊĠĠĠĠĠĠĠ Ġold State : ĠRe Learn Card ViewState ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Binding . show Hide . isChecked Ġ!= ĠnewState . is Re ve aled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . show Hide . isChecked Ġ= ĠnewState . is Re ve aled ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Binding . group Show Hide . setEnabled For Views ( newState . is Re ve aled ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( needs Re veal Animation ( newState , Ġold State )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState . is Re ve aled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Re veal Animator . reveal ( view Binding . group Show Hide , Ġview Binding . show Hide ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Re veal Animator . un reveal ( view Binding . group Show Hide , Ġview Binding . show Hide ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . group Show Hide . set Alpha For Views ( if Ġ( newState . is Re ve aled ) Ġ 1 F Ġelse Ġ 0 F ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Out Actions () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Binding . group Actions . visibility Ġ!= ĠView . VISIBLE ) Ġreturn ĊĠĠĠĠĠĠĠ Ġview Binding . show Hide . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Button Top Margin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Binding . button Accept . layout Params Ġas ĠConstraint Layout . LayoutParams ). top Margin ĊĊĠĠĠĠĠĠĠ Ġval Ġslide Up Px Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . button Accept . height Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Button Top Margin Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Binding . button Accept . layout Params Ġas ĠConstraint Layout . LayoutParams ). bottom Margin ĊĠĠĠĠĠĠĠ Ġ// we 're Ġgoing Ġto Ġcomp ens ate Ġfor Ġthe Ġminimum Ġheight Ġof Ġthe Ġscene Ġand Ġthe Ġnew Ġstate Ġwill Ġnot ĊĠĠĠĠĠĠĠ Ġ// scroll Ġup Ġthe Ġentire Ġheight Ġof Ġthe Ġhidden Ġview ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Height Overflow Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . scene . height Ġ- Ġview Binding . scene . min Height ĊĠĠĠĠĠĠĠ Ġval Ġanimation Height Correction Ratio Ġ= Ġif Ġ( original Height Overflow Ġ< Ġslide Up Px ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 F Ġ/ Ġ( 1 F Ġ+ Ġ( slide Up Px Ġ- Ġoriginal Height Overflow ) Ġ/ Ġslide Up Px ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 1 F ĊĊĠĠĠĠĠĠĠ Ġ// we 're Ġgoing Ġto Ġanimate Ġthe Ġbottom Ġmargin Ġof Ġthe Ġremaining Ġview Ġ( the Ġtranslation Ġtext ) ĊĠĠĠĠĠĠĠ Ġ// first Ġwe Ġneed Ġto Ġinitialize Ġit ĊĠĠĠĠĠĠĠ Ġval Ġtranslation LayoutParams Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . source Translation . layout Params Ġas ĠConstraint Layout . LayoutParams ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Bottom Margin Ġ= Ġtranslation LayoutParams . bottom Margin ĊĠĠĠĠĠĠĠ Ġtranslation LayoutParams . bottom Margin Ġ= Ġoriginal Bottom Margin Ġ+ Ġslide Up Px ĊĠĠĠĠĠĠĠ Ġview Binding . source Translation . layout Params Ġ= Ġtranslation LayoutParams ĊĊĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĠĠĠĠĠĠĠ Ġconstraint Set . clone ( view Binding . scene ) ĊĠĠĠĠĠĠĠ Ġ// this Ġwill Ġdetach Ġthe Ġbuttons Ġfrom Ġthe Ġtranslation Ġso Ġit Ġno Ġlonger Ġprevents Ġthe Ġcard Ġfrom Ġcol lap sing ĊĠĠĠĠĠĠĠ Ġconstraint Set . clear ( R . id . button _ accept , ĠConstraint Set . TOP ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . clear ( R . id . button _ delete , ĠConstraint Set . TOP ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . apply To ( view Binding . scene ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfade Ġ= ĠObject Animator . of Float ( 1 F , Ġ 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ( TRANS ITION _ DURATION _ MS Ġ/ Ġ 2 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . button Accept . alpha Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . button Delete . alpha Ġ= Ġit . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmove Ġ= ĠObject Animator . of Int ( slide Up Px , Ġ 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ( TRANS ITION _ DURATION _ MS Ġ/ Ġ 2 Ġ* Ġanimation Height Correction Ratio ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation LayoutParams . bottom Margin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Bottom Margin Ġ+ Ġit . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . source Translation . layout Params Ġ= Ġtranslation LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! view Binding . root . is Attached To Window ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Constraints After Accept Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Button Top Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Bottom Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions Listener ( Re Learn Action . Accept Animation Finished ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= ĠAn imator Set () ĊĠĠĠĠĠĠĠ Ġset . play Se quent ially ( fade , Ġmove ) ĊĠĠĠĠĠĠĠ Ġset . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconnect Button To Translation AndSet Alpha ( ĊĠĠĠĠĠĠĠ Ġconstraint Set : ĠConstraint Set , ĊĠĠĠĠĠĠĠ Ġbutton Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġoriginal Top Margin : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstraint Set . set Margin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . TOP , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Top Margin ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . set Alpha ( button Id , Ġ 1 F ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . connect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . TOP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . source _ translation , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . BOTTOM ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Constraints After Accept Animation ( ĊĠĠĠĠĠĠĠ Ġconstraint Set : ĠConstraint Set , ĊĠĠĠĠĠĠĠ Ġoriginal Top Margin : ĠInt , ĊĠĠĠĠĠĠĠ Ġoriginal Bottom Margin : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . group Actions . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġview Binding . show Hide . isEnabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġconstraint Set . set Margin ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . source _ translation , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstraint Set . BOTTOM , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Bottom Margin ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġconnect Button To Translation AndSet Alpha ( constraint Set , ĠR . id . button _ accept , Ġoriginal Top Margin ) ĊĠĠĠĠĠĠĠ Ġconnect Button To Translation AndSet Alpha ( constraint Set , ĠR . id . button _ delete , Ġoriginal Top Margin ) ĊĊĠĠĠĠĠĠĠ Ġconstraint Set . apply To ( view Binding . scene ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Translation Data ( re Learn Translation : ĠRe Learn Translation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . source Title . text Ġ= Ġre Learn Translation . source Text ĊĠĠĠĠĠĠĠ Ġview Binding . source Translation . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre Learn Translation Formatter . format Translation Text For Notification ( re Learn Translation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ass isted Inject . Factory ĊĠĠĠ Ġinterface ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( view Binding : ĠItem Re learn Card Binding ): ĠRe Learn Next Card ViewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTRANS ITION _ DURATION _ MS Ġ= Ġ 4 0 0 ĊĠĠĠ Ġ} Ċ }