package Ġorg . vide ol an . tele vision . ui . details Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Obsolete Cor outines Api Ċ import Ġorg . vide ol an . med iali brary . interfaces . media . Media Wrapper Ċ import Ġorg . vide ol an . med iali brary . media . Media Library Item Ċ import Ġorg . vide ol an . resources . interfaces . Focus Listener Ċ import Ġorg . vide ol an . tele vision . databinding . Activity Media List Tv Item Binding Ċ import Ġorg . vide ol an . tele vision . ui . Tv Focus able Adapter Ċ import Ġorg . vide ol an . v lc . Build Config Ċ import Ġorg . vide ol an . v lc . gui . Diff Util Adapter Ċ import Ġorg . vide ol an . v lc . gui . helpers . Selector ViewHolder Ċ import Ġorg . vide ol an . v lc . interfaces . IT V Events Handler Ċ Ċ @ Experimental Cor outines Api Ċ @ Obsolete Cor outines Api Ċ class ĠMedia ListAdapter ( private Ġval Ġtype : ĠInt , Ġprivate Ġval Ġlistener : ĠI TV Events Handler ) Ġ: ĠDiff Util Adapter < Media Wrapper , ĠMedia ListAdapter . Media ListView Holder >(), ĠT v Focus able Adapter Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfocus Listener : ĠFocus Listener ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun Ġset On Focus ChangeListener ( focus Listener : ĠFocus Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . focus Listener Ġ= Ġfocus Listener ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġlast Moved Item From Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġlast Moved Item To Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠMedia ListView Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠActivity Media List Tv Item Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMedia ListView Holder ( binding , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠMedia ListView Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġholder . binding . item Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġholder . binding . holder Ġ= Ġholder ĊĊĠĠĠĠĠĠĠ Ġval Ġmove Visibility Ġ= Ġif Ġ( type Ġ== ĠMedia Library Item . TYPE _ AL BU M ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġholder . binding . item Move Down . visibility Ġ= Ġif Ġ( move Visibility Ġ== ĠView . VISIBLE Ġ&& Ġposition Ġ== Ġitem Count Ġ- Ġ 1 ) ĠView . IN VISIBLE Ġelse Ġmove Visibility ĊĠĠĠĠĠĠĠ Ġholder . binding . item Move Up . visibility Ġ= Ġif Ġ( move Visibility Ġ== ĠView . VISIBLE Ġ&& Ġposition Ġ== Ġ 0 ) ĠView . IN VISIBLE Ġelse Ġmove Visibility ĊĠĠĠĠĠĠĠ Ġholder . binding . item Remove . visibility Ġ= Ġmove Visibility ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMedia Library Item . TYPE _ AL BU M ) Ġ( holder . binding . item Add Playlist . layout Params Ġas ĠConstraint Layout . LayoutParams ). margin End Ġ= Ġ 0 ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetect Moves () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġcreate CB (): ĠDiff Callback < Media Wrapper > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠDiff Callback < Media Wrapper >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Item Position Ġ== Ġlast Moved Item From ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Moved Item From Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Item Position Ġ== Ġlast Moved Item To ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Moved Item To Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . are Contents The Same ( old Item Position , Ġnew Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġinner Ġclass ĠMedia ListView Holder ( binding : ĠActivity Media List Tv Item Binding , Ġtype : ĠInt ) Ġ: ĠSelector ViewHolder < Activity Media List Tv Item Binding >( binding ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ad able Views Ġ= ĠarrayOf ( binding . item Move Down , Ġbinding . item Move Up , Ġbinding . item Add Playlist , Ġbinding . item Insert Next , Ġbinding . item Append , Ġbinding . item Selector , Ġbinding . item Remove ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfocus ChangeListener Ġ= ĠView . On Focus ChangeListener Ġ{ Ġv , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġif Ġ(! has Focus ) Ġ 0 f Ġelse Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ad able Views . forEach Ġ{ Ġit . animate (). alpha ( alpha ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay Alpha Ġ= Ġif Ġ( v Ġ== Ġbinding . item Selector Ġ&& Ġhas Focus ) Ġ 1 f Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . item Play . animate (). alpha ( play Alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Focus Changed ( getItem ( layout Position )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Listener ?. on Focus Changed ( layout Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ad able Views . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Focus ChangeListener Ġ= Ġfocus ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . item Play . on Focus ChangeListener Ġ= Ġfocus ChangeListener ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonClick Play ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onClick Play ( v , Ġlayout Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonClick Move Down ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Moved Item From Ġ= Ġlayout Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Moved Item To Ġ= Ġlayout Position Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) ĠLog . d (" Media ListAdapter ", Ġ" From Ġ$ last Moved Item From Ġto Ġ$ last Moved Item To ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onClick Move Down ( v , Ġlayout Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonClick Move Up ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Moved Item From Ġ= Ġlayout Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Moved Item To Ġ= Ġlayout Position Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) ĠLog . d (" Media ListAdapter ", Ġ" From Ġ$ last Moved Item From Ġto Ġ$ last Moved Item To ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onClick Move Up ( v , Ġlayout Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonClick Append ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onClick Append ( v , Ġlayout Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonClick AddTo Playlist ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onClick AddTo Playlist ( v , Ġlayout Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonClick Remove ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onClick Remove ( v , Ġlayout Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠonClick Play Next ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onClick Play Next ( v , Ġlayout Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }