package Ġio . ex zo coin . wallet . modules . market . home Ċ Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Table Layout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . core . animation . do On End Ċ import Ġandroidx . core . animation . do On Start Ċ import Ġandroidx . core . view . isIn visible Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġio . ex zo coin . wallet . R Ċ import Ġio . ex zo coin . views . helpers . Layout Helper Ċ import Ġio . ex zo coin . wallet . entities . Feature d Project Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . NumberFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . math . max Ċ Ċ class ĠMarket Feature d Project Adapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġtab Layout : ĠTab Layout , ĊĠĠĠ Ġprivate Ġval Ġmarket Categories : ĠList < Feature d Project >, Ċ ) Ġ: ĠTab Layout . On Tab Selected Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠitemView MaxLength Ġ= ĠLayout Helper . dp ( 2 1 2 f , Ġcontext ) ĊĠĠĠ Ġprivate Ġval ĠitemView Min Length Ġ= ĠLayout Helper . dp ( 1 2 4 f , Ġcontext ) ĊĠĠĠ Ġprivate Ġval Ġactive Color Ġ= Ġcontext . getColor ( R . color . law rence ) ĊĠĠĠ Ġprivate Ġval Ġinactive Color Ġ= Ġcontext . getColor ( R . color . panel ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmarket Categories . forEach Ġ{ Ġcategory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Layout . new Tab () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Custom View ( LayoutInflater . from ( context ). inflate ( R . layout . view _ market _ featured _ coin , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText ( category . token Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Token Logo ( category . logo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Price ( category . price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Change Text ( category . price _ change , Ġcategory . price _ change /( 1 0 0 Ġ+ Ġcategory . price _ change )* category . price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab Layout . add Tab ( it , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtab Layout . setSelected Tab Indicator ( null ) ĊĠĠĠĠĠĠĠ Ġtab Layout . tab R ipple Color Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtab Layout . add On Tab Selected Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab , Ġis Initial : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtab . custom View ?. is Activated Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// hide Ġicon ĊĠĠĠĠĠĠĠ Ġval Ġicon View Ġ= Ġtab . view . findViewById < ImageView >( android . R . id . icon ) ĊĠĠĠĠĠĠĠ Ġanimate Icon ( icon View , Ġ 1 f , Ġ 0 f , Ġ 1 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// translate Ġtitle Ġto Ġtop ĊĠĠĠĠĠĠĠ Ġanimate Title ( tab . view , Ġ 1 5 0 L , Ġis Initial ) ĊĊĠĠĠĠĠĠĠ Ġ// expand Ġlayout ĊĠĠĠĠĠĠĠ Ġval Ġlast Tab Position Ġ= Ġif Ġ( tab . position Ġ== Ġtab Layout . tab Count Ġ- Ġ 1 ) Ġtab . position Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġanimate Tab Width ( tab . view , ĠitemView MaxLength , Ġ 3 0 0 L , Ġlast Tab Position ) ĊĊĠĠĠĠĠĠĠ Ġ// show Ġdescription ĊĠĠĠĠĠĠĠ Ġanimate Description ( tab , Ġ 0 f , Ġ 1 f , Ġ 2 5 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// color Ġanimation ĊĠĠĠĠĠĠĠ Ġtab . custom View ?. let Ġ{ Ġanimate Tab Color ( it , Ġinactive Color , Ġactive Color , Ġ 3 0 0 L ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Tab Selected ( tab , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtab . custom View ?. is Activated Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// hide Ġdescription ĊĠĠĠĠĠĠĠ Ġanimate Description ( tab , Ġ 1 f , Ġ 0 f , Ġ 5 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// show Ġicon ĊĠĠĠĠĠĠĠ Ġval Ġicon View Ġ= Ġtab . view . findViewById < ImageView >( android . R . id . icon ) ĊĠĠĠĠĠĠĠ Ġanimate Icon ( icon View , Ġ 0 f , Ġ 1 f , Ġ 2 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// translate Ġtitle Ġto Ġbottom ĊĠĠĠĠĠĠĠ Ġanimate Title ( tab . view , Ġ 2 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// collapse Ġlayout ĊĠĠĠĠĠĠĠ Ġval Ġtitle TextView Ġ= Ġtab . view . findViewById < TextView >( android . R . id . text 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġto Width Ġ= Ġmax ( title TextView . width Ġ+ ĠLayout Helper . dp ( 4 0 f , Ġcontext ), ĠitemView Min Length ) ĊĠĠĠĠĠĠĠ Ġanimate Tab Width ( tab . view , Ġto Width , Ġ 3 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// color Ġanimation ĊĠĠĠĠĠĠĠ Ġtab . custom View ?. let Ġ{ Ġanimate Tab Color ( it , Ġactive Color , Ġinactive Color , Ġ 2 0 0 L ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Icon ( view : ĠView , Ġfrom Alpha : ĠFloat , Ġto Alpha : ĠFloat , Ġanim Duration : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠObject Animator . of Float ( view , ĠImageView . ALPHA , Ġfrom Alpha , Ġto Alpha ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġanim Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Description ( tab : ĠTab Layout . Tab , Ġfrom Alpha : ĠFloat , Ġto Alpha : ĠFloat , Ġanim Duration : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdescription TextView Ġ= Ġtab . view . findViewById < TextView >( R . id . description ) ĊĊĠĠĠĠĠĠĠ ĠValue Animator . of Float ( from Alpha , Ġto Alpha ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription TextView . alpha Ġ= Ġvalue Animator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Start Ġ{ Ġif Ġ( to Alpha Ġ== Ġ 1 f ) Ġdescription TextView . visibility Ġ= ĠView . VISIBLE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo On End Ġ{ Ġif Ġ( to Alpha Ġ== Ġ 0 f ) Ġdescription TextView . visibility Ġ= ĠView . GONE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġanim Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Title ( tab View : ĠTab Layout . Tab View , Ġanim Duration : ĠLong , Ġis Initial : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle TextView Ġ= Ġtab View . findViewById < TextView >( android . R . id . text 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġtop Border Ġ= Ġtab View . findViewById < View >( R . id . top Border ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Initial ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġtrick Ġneeded Ġto Ġavoid Ġinitial Ġanimation Ġwhen Ġrest oring Ġfragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle TextView . isIn visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle TextView . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle TextView . translation Y Ġ= Ġtop Border . y Ġ- Ġtitle TextView . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle TextView . isIn visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 2 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠObject Animator . of Float ( title TextView , ĠView . TRANSL ATION _ Y , Ġtop Border . y Ġ- Ġtitle TextView . y ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġanim Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Tab Width ( tab View : ĠTab Layout . Tab View , Ġto Width : ĠInt , Ġanim Duration : ĠLong , Ġlast Tab Position : ĠInt ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠValue Animator . of Int ( tab View . width , Ġto Width ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġtab View . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . width Ġ= Ġvalue Animator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab View . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Tab Position ?. let Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// fixes Ġexpand ing Ġanimation Ġof Ġlast Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab Layout . set Scroll Position ( position , Ġ 0 f , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġanim Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate Tab Color ( view : ĠView , Ġfrom Color : ĠInt , Ġto Color : ĠInt , Ġduration : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Animation Ġ= ĠValue Animator . of Object ( Argb Evaluator (), Ġfrom Color , Ġto Color ) ĊĠĠĠĠĠĠĠ Ġcolor Animation . duration Ġ= Ġduration ĊĠĠĠĠĠĠĠ Ġcolor Animation . add Update Listener Ġ{ Ġanim ator Ġ-> Ġview . background Tint List Ġ= ĠColor State List . valueOf ( anim ator . animated Value Ġas ĠInt ) Ġ} ĊĠĠĠĠĠĠĠ Ġcolor Animation . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtab Layout . select Tab ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠTab Layout . Tab . set Token Logo ( logo : ĠString ): ĠTab Layout . Tab Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠimageView Ġ= Ġview . findViewById < ImageView >( R . id . token Logo ); ĊĊĠĠĠĠĠĠĠ ĠG lide . with ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( logo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . ic _ unordered _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( imageView ); ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠTab Layout . Tab . set Price ( price : ĠDouble ): ĠTab Layout . Tab Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠNumber Format . getC urrency Instance ( Locale (" en ", Ġ" US ")). format ( price ) ĊĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . price ). setText ( res ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠTab Layout . Tab . set Change Text ( change _ percent : ĠDouble , Ġchange : ĠDouble ): ĠTab Layout . Tab Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠDecimal Format (" ### , ### , ## 0 . 0 0 ") ĊĠĠĠĠĠĠĠ Ġvar ĠtextView : ĠTextView Ġ= Ġview . findViewById < TextView >( R . id . state ) ĊĠĠĠĠĠĠĠ Ġvar Ġamount : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( change Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ"+ ${ formatter . format ( change )} (${ formatter . format ( change _ percent )} %) âĸ ² " ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ"${ formatter . format ( change )} (${ formatter . format ( change _ percent )} %) âĸ ¼ " ĊĠĠĠĠĠĠĠ ĠtextView . setText ( amount ) ĊĠĠĠĠĠĠĠ Ġif Ġ( change Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( textView . resources . getColor ( R . color . green _ l )) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( textView . resources . getColor ( R . color . red _ d )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonSelect ( market Category : ĠMarket Home Feature d ?) ĊĠĠĠ Ġ} Ċ Ċ } Ċ