package Ġcom . ox ford . resume . views Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ox ford . resume . Resume App Ċ import Ġcom . ox ford . resume . R Ċ import Ġcom . ox ford . resume . views . fragment Views . Menu Fragment View Ċ import Ġcom . squareup . otto . Bus Ċ import Ġkotlinx . android . synt hetic . main . menu _ grid _ view . view .* Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠMenu Fragment Grid RecyclerView ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġdata List : ĠArrayList < Menu Fragment View . MenuItem >, ĊĠĠĠ Ġcallback : ĠGrid View Callback Ċ ) Ġ: ĠRecyclerView ( context ) Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġm Bus : ĠBus ĊĊĠĠĠ Ġinterface ĠGrid View Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon MenuItem Selected ( title : ĠString ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġm CallBack Ġ= Ġcallback ĊĠĠĠ Ġvar Ġm Adapter : ĠMenu Fragment Grid Adapter ? Ġ= Ġnull ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ( context ?. application Context Ġas ĠResume App ). my Component . inject ( this ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠFrame Layout . LayoutParams ( LayoutParams . MATCH _ PARENT , ĠLayout Params . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , Ġ 2 , ĠGrid LayoutManager . VERTICAL , Ġfalse ) ĊĊĊĠĠĠĠĠĠĠ Ġview Tree Observer . add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠMenu Fragment Grid Adapter ( data List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Nested Scrolling Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġre cyc led View Pool . setMax Re cyc led Views ( 0 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġset Re cyc led View Pool ( re cyc led View Pool ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġpublic Ġfun Ġswitch Menu ( menu Data : ĠList < Menu Fragment View . MenuItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfade Out Menu ( menu Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfade Out Menu ( menu Data : ĠList < Menu Fragment View . MenuItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Button Transition ( true , Ġmenu Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠfadeIn Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Button Transition ( false , ĠArrayList < Menu Fragment View . MenuItem >()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġpublic Ġfun Ġmenu Button Transition ( fadeOut : ĠBoolean , Ġmenu Data : ĠList < Menu Fragment View . MenuItem >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanim Set Ġ= ĠAn imator Set () ĊĠĠĠĠĠĠĠ Ġval Ġanim List Ġ= ĠArrayList < Animator >() ĊĠĠĠĠĠĠĠ Ġvar Ġalpha Ġ= Ġif Ġ( fadeOut ) Ġ 0 f Ġelse Ġ 1 f ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Adapter !!. item Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Button Ġ= Ġfind ViewHolder For Layout Position ( i ) Ġas ĠMenu ViewHolder ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfade Out Image Anim Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( view Button . item View . ImageView _ menu _ grid _ view _ image , ĠView . ALPHA , Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfade Out Text Anim Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( view Button . item View . TextView _ menu _ grid _ view _ text , ĠView . ALPHA , Ġalpha ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim List . add ( fadeOut Image Anim ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim List . add ( fadeOut Text Anim ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanim Set . play To gether ( anim List ) ĊĠĠĠĠĠĠĠ Ġanim Set . duration Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( fadeOut ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim Set . addListener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. setData List ( menu Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfadeIn Menu () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġanim Set . start () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinner Ġclass ĠMenu Fragment Grid Adapter ( var Ġm List : ĠList < Menu Fragment View . MenuItem >) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < Menu ViewHolder >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpublic Ġfun Ġset DataList ( list : ĠList < Menu Fragment View . MenuItem >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm List Ġ= Ġlist ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠMenu ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfl ated View Ġ= Ġinf late ( context , ĠR . layout . menu _ grid _ view , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfl ated View . layout Params Ġ= ĠLayout Params ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfl ated View . layout Params . width Ġ= Ġresources . display Metrics . width Pixels Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfl ated View . layout Params . height Ġ= Ġheight Ġ/ Ġ 3 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMenu ViewHolder ( in fl ated View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm List . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠMenu ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Item Ġ= Ġm List [ position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . ImageView _ menu _ grid _ view _ image . setImage Resource ( menuItem . image Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . ImageView _ menu _ grid _ view _ image . setColor Filter ( menuItem . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . TextView _ menu _ grid _ view _ text . text Ġ= Ġmenu Item . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . TextView _ menu _ grid _ view _ text . setTextColor ( menuItem . color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm CallBack . on MenuItem Selected ( menuItem . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠMenu ViewHolder ( view : ĠView ) Ġ: ĠViewHolder ( view ) ĊĊ Ċ } ĊĊĊĊ