package Ġio . s ik ork a . android . ui . dialogs . file selection Ċ Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroid . view . ViewGroup Ċ import Ġio . s ik ork a . android . ui . dialogs . file selection . Selection . DIRECTORY Ċ import Ġio . s ik ork a . android . ui . dialogs . file selection . Selection . FILE Ċ import Ġjava . io . File Ċ Ċ class ĠFile Selection Adapter Ġ: ĠList Adapter < File , ĠFile Selection ViewHolder >( DIFF _ CALLBACK ) Ġ{ ĊĊĠ Ġprivate Ġlateinit Ġvar Ġon File Selected : ĠOn File Pressed ĊĊĠ Ġprivate Ġvar Ġselected Item Position Ġ= Ġ- 1 ĊĠ Ġ@ Selection Mode ĊĠ Ġprivate Ġvar Ġselection Mode : ĠInt Ġ= ĠFILE ĊĊĠ Ġfun Ġset Selection Mode (@ Selection Mode Ġselection Mode : ĠInt ) Ġ{ ĊĠĠĠ Ġthis . selection Mode Ġ= Ġselection Mode ĊĠ Ġ} ĊĊĠ Ġfun Ġset On File Selected ( on File Selected : ĠOn File Pressed ) Ġ{ ĊĠĠĠ Ġthis . on File Selected Ġ= Ġon File Selected ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠFile Selection ViewHolder Ġ{ ĊĠĠĠ Ġreturn ĠFile Selection ViewHolder . create ( parent ) Ġ{ Ġposition , Ġlong Ġ-> ĊĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĊĠĠĠĠĠ Ġval Ġis Directory Only Ġ= Ġselection Mode Ġ== ĠDIRECTORY ĊĠĠĠĠĠ Ġif Ġ( isDirectory Only ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Ġ= Ġon File Selected ( item , Ġ! long ) ĊĠĠĠĠĠĠĠ Ġnotify Selection Change ( if Ġ( selected ) Ġposition Ġelse Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġreturn @ create ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġon File Selected ( item , Ġitem . isDirectory ) ĊĠĠĠĠĠ Ġnotify Selection Change ( position ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnotify Selection Change ( position : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġold Position Ġ= Ġselected Item Position ĊĠĠĠ Ġselected Item Position Ġ= Ġposition ĊĊĠĠĠ Ġnotify Item Changed ( position , ĠSE LECTION ) ĊĠĠĠ Ġnotify Item Changed ( old Position , ĠSE LECTION ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠFile Selection ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠ Ġholder . run Ġ{ ĊĠĠĠĠĠ Ġbind To ( item ) ĊĠĠĠĠĠ Ġselected ( position Ġ== Ġselected Item Position ) ĊĠĠĠĠĠ Ġselection Mode ( selection Mode ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠ Ġholder : ĠFile Selection ViewHolder , ĊĠĠĠ Ġposition : ĠInt , ĊĠĠĠ Ġpayload s : ĠMutable List < Any > ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ( payload s . contains ( SELECTION )) Ġ{ ĊĠĠĠĠĠ Ġholder . selection Mode ( selection Mode ) ĊĠĠĠĠĠ Ġholder . selected ( position Ġ== Ġselected Item Position ) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuper . on Bind ViewHolder ( holder , Ġposition , Ġpayload s ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠSE LECTION Ġ= Ġ" selection " ĊĊĠĠĠ Ġval ĠDIFF _ CALLBACK Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < File >() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠFile , Ġnew Item : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . absolute Path Ġ== Ġnew Item . absolute Path ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠFile , Ġnew Item : ĠFile ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }