package Ġorg . m ight yf rog . android . s 4 fd . main Ċ Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . util . S parseInt Array Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ra iz labs . android . db flow . sql . language . Select Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġorg . m ight yf rog . android . s 4 fd . R Ċ import Ġorg . m ight yf rog . android . s 4 fd . data . KH Character Ċ import Ġorg . m ight yf rog . android . s 4 fd . data . Movement Datum Ċ import Ġorg . m ight yf rog . android . s 4 fd . data . Movement Datum _ Table Ċ Ċ /** Ċ Ġ* Ġ@ author ĠSh ige hi ro ĠSo ej ima Ċ Ġ*/ Ċ class ĠCharacter Adapter ( private Ġvar Ġlist : ĠList < KH Character >, Ġprivate Ġval Ġlistener : ĠMainActivity . On ItemClickListener ) Ġ: Ġandroidx . recyclerview . widget . RecyclerView . Adapter < android x . recyclerview . widget . RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMODE _ LINEAR Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMODE _ GRID Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmode Ġ= ĠMODE _ LINEAR ĊĊĠĠĠ Ġprivate Ġval Ġvalue Map Ġ= ĠSparse Array < String >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġlist [ position ]. id . to Long () ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġlist . size ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= Ġmode ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ LINEAR Ġ-> Ġ( holder Ġas ĠLinear ViewHolder ). bind ( list [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ GRID Ġ-> Ġ( holder Ġas ĠGrid ViewHolder ). bind ( list [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlast Adapter Position Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ LINEAR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv h Ġ= ĠLinear ViewHolder ( LayoutInflater . from ( parent . context ). inflate ( R . layout . vh _ main _ linear , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv h . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġv h . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Adapter Position Ġ!= Ġpos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Adapter Position Ġ= Ġpos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Item Click ( list [ pos ]. id , Ġpos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġv h ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ GRID Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv h Ġ= ĠGrid ViewHolder ( LayoutInflater . from ( parent . context ). inflate ( R . layout . vh _ main _ grid , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv h . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġv h . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Adapter Position Ġ!= Ġpos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Adapter Position Ġ= Ġpos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Item Click ( list [ pos ]. id , Ġpos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġv h ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" unknown Ġview Ġmode ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Mode ( mode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mode Ġ= Ġmode ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( list : ĠList < KH Character > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġthis . list Ġ= Ġlist ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreverse () Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġlist . reversed () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsort ( sortBy : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( sortBy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ name Ġ-> Ġsort ByName () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ weight Ġ-> Ġsort Int (" Weight ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ run _ speed Ġ-> Ġsort Float (" Run ĠSpeed ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ walk _ speed Ġ-> Ġsort Float (" Walk ĠSpeed ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ max _ jump s Ġ-> Ġsort Int (" Max ĠJump s ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ wall _ cl ing Ġ-> Ġsort String (" Wall ĠC ling ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ wall _ jump Ġ-> Ġsort String (" Wall ĠJump ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ air _ speed Ġ-> Ġsort Float (" Air ĠSpeed ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ crawl Ġ-> Ġsort String (" C rawl ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ te ther Ġ-> Ġsort String (" Te ther ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ jump s quat Ġ-> Ġsort String (" Jump s quat ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ air _ acceleration Ġ-> Ġsort Float (" Air ĠAccel eration ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ soft _ landing _ lag Ġ-> Ġsort String (" Soft ĠLand ing ĠL ag ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ hard _ landing _ lag Ġ-> Ġsort String (" Hard ĠLand ing ĠL ag ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ gravity Ġ-> Ġsort Float (" Gravity ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ fall _ speed Ġ-> Ġsort Float (" Fall ĠSpeed ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ fast _ fall _ speed Ġ-> Ġsort Float (" Fast ĠFall ĠSpeed ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ sh _ air _ time Ġ-> Ġsort String (" SH ĠAir ĠTime ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sort _ by _ fh _ air _ time Ġ-> Ġsort String (" FH ĠAir ĠTime ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlistener . on Sorted () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Last Adapter Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Adapter Position Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort Int ( by : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= ĠSelect (). from ( Movement Datum :: class . java ). where ( Movement Datum _ Table . name . eq ( by )). query List () ĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġlist . sorted By Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠS parseInt Array ( list . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( datum Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( datum . owner Id , Ġdatum . value !!. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Map . put ( datum . owner Id , Ġdatum . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . list Ġ= Ġthis . list . sorted By Descending Ġ{ Ġmap [ it . id ] Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort Float ( by : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= ĠSelect (). from ( Movement Datum :: class . java ). where ( Movement Datum _ Table . name . eq ( by )). query List () ĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġlist . sorted By Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠSparse Array < Float >( list . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( datum Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( datum . owner Id , Ġdatum . value !!. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Map . put ( datum . owner Id , Ġdatum . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . list Ġ= Ġthis . list . sorted By Descending Ġ{ Ġmap [ it . id ] Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort String ( by : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= ĠSelect (). from ( Movement Datum :: class . java ). where ( Movement Datum _ Table . name . eq ( by )). query List () ĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġlist . sorted By Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠSparse Array < String >( list . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( datum Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( datum . owner Id , Ġdatum . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Map . put ( datum . owner Id , Ġdatum . value ?. replace (" frame ", Ġ" Ġframe ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsort ByName () ĊĠĠĠĠĠĠĠ Ġthis . list Ġ= Ġthis . list . sorted By Ġ{ Ġmap [ it . id ] Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsort ByName () Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Ġ= Ġlist . sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠLinear ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġthumbnail Iv Ġ= ĠitemView . findViewById < ImageView >( R . id . thumbnail ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġname Tv Ġ= ĠitemView . findViewById < TextView >( R . id . name ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvalue Tv Ġ= ĠitemView . findViewById < TextView >( R . id . value ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( character : ĠK H Character ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . with ( thumbnail Iv . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( character . thumbnail Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( thumbnail Iv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Tv . text Ġ= Ġcharacter . displayName ?. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Map . get ( character . id )?. let Ġ{ Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Tv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Tv . text Ġ= Ġchar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Tv . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠGrid ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġthumbnail Iv Ġ= ĠitemView . findViewById < ImageView >( R . id . thumbnail ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvalue Tv Ġ= ĠitemView . findViewById < TextView >( R . id . value ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( character : ĠK H Character ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . with ( thumbnail Iv . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( character . thumbnail Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( thumbnail Iv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Map . get ( character . id )?. let Ġ{ Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Tv . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Tv . text Ġ= Ġchar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Tv . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }